考虑以下代码:
var i = 0;
>> undefined
i += i + i++;
>> 0
i
>> 0 // why not 1?
由于增量(i
)运算符,我希望1
为++
。我认为应该发生的事情是:
i = 0 + 0 + (i = i + 1)
i = 0 + 1
i = 1
为什么它会返回零呢?有人可以解释现场发生的事情吗?
答案 0 :(得分:5)
重要的是要i++
增加i
,但会返回i
的原始值。
操作符的后缀版本(也称为后增量)记录为here:
如果使用postfix,在操作数之后使用运算符(例如,x ++),则在递增之前返回该值。
所以评估为:
i = 0 + (j = i, i += 1, j);
注意使用上面的comma operator。
您所描述的更像是运算符的前缀版本(也称为预增量)++i
,它将评估为:
i = 0 + (i += 1);
确实会返回1。
答案 1 :(得分:2)
应该是
i += i + (++i);
如果使用i ++,增量在表达式之后,因此它将简单地解析为 i