为什么i + = i + i ++等于0?

时间:2014-08-08 15:19:16

标签: javascript increment

考虑以下代码:

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

为什么它会返回零呢?有人可以解释现场发生的事情吗?

2 个答案:

答案 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