这是使用一元运算符“++”的测试情况:
var j = 0 ;
console.log(j);
j = j++;
console.log(j);
为此,输出为:
0
0
由于++运算符的位置在操作数的后面,因此它的优先级低于赋值的优先级,我希望“j”先接收其自身的值(即0),然后再递增。那么,为什么第二个
console.log(j)
调用仍然显示“0”?明确地说,我知道解决方案是:
// 1)
j++;
// 2)
++j;
// 3)
j += 1;
// 4)
j = ++j;
但是我需要知道为什么在这种特定情况下不执行增量步骤,而不是如何解决它!
最佳答案
使用后增量时,这是一种不直观(但不是“怪异”!)的行为。
语句j = j++
可以做到这一点:
foo() = j++
j
(0)的当前值,并将其记为结果; j
(得到1); j
(0)的“已记住”值。 结果是无人值守。
这里的关键是在最终分配之前评估整个RHS并执行后增量。
http://www.ecma-international.org/ecma-262/5.1/#sec-11.3.1
http://www.ecma-international.org/ecma-262/5.1/#sec-11.13.1