【问题标题】:Why assigning the postfix operation not updating the value of a variable? [duplicate]为什么分配后缀操作不更新变量的值? [复制]
【发布时间】:2021-03-09 03:48:46
【问题描述】:

今天我看到后缀和赋值运算符的奇怪结果,这是我完全没有预料到的。

说吧

let a = 10;

当我们用后缀递增时,会加上1,如下所示

console.log( a++ );    // 10
console.log( a );      // 11

AFAIK a++ 是一个后缀操作,这意味着

  • 首先,它将使用值(这就是a++ 返回10 的原因)然后
  • 更新值
  • 当我们打印该值时,该值已更新。这就是a 返回11 的原因。

到目前为止一切顺利,

但是当我将后缀操作分配给变量时,它不会更新值。

a = a++;
console.log( a );     // 11  

虽然我预计结果是 12。为什么会出现这个结果?提前致谢。

let a = 10;
console.log(a++);
console.log(a);

a = a++;
console.log(a);

【问题讨论】:

  • 我想这可能是因为 assignmentpostfix 运算符的优先级。但是postfix的优先级大于assignmentdeveloper.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • a++ 计算为a 的值,然后递增aa 的原始值在增量发生后被重新分配回变量(因为这是后缀表达式计算的结果)
  • 这意味着b = bb = b++ 都是相等的。 ????
  • 是的,这就是后缀运算符的作用。
  • @SebastianSimon 是的,这回答了我的问题

标签: javascript


【解决方案1】:

它确实会增加,但如果你打破这个过程,

由于后缀的优先级大于赋值

b = b++

第 1 步 => 执行 b++ 返回 b

步骤 2 => 将返回值赋给 b,即将 b 赋给 b

现在 console.log 显示相同的旧值。

b = 10;

Step 1 => 返回 10 并递增到 11。 第 2 步 => 由于返回值为 10,将 10 重新分配给 a,这导致 console.log(a) 将 10 显示为值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    相关资源
    最近更新 更多