Javascript 为什么我+;=i+;i++;等于0?

Javascript 为什么我+;=i+;i++;等于0?,javascript,increment,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 为什么它会返回零呢?有人能解释一下场景下发生了什么吗?重要的是要认识到,i++增加了i,但返回了i的原始值。 操作员的后缀版本(也称为后增量)记录如下: 如果使用后缀,在

考虑以下代码:

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

为什么它会返回零呢?有人能解释一下场景下发生了什么吗?

重要的是要认识到,
i++
增加了
i
,但返回了
i
的原始值。 操作员的后缀版本(也称为后增量)记录如下:

如果使用后缀,在操作数后加运算符(例如,x++),则返回递增前的值

因此,其计算结果为:

i = 0 + (j = i, i += 1, j);
注意上面的用法

您所描述的更像是运算符的前缀版本(也称为预增量),
++i
,其计算结果为:

i = 0 + (i += 1);
它确实返回1。

应该是

i += i + (++i);

如果使用i++,则表达式后面的增量是,因此它将简单地解析为i

第一个i++的结果是0(返回和增量vs增量和返回(++i))后增量vs预增量您必须预增量
i++=i+++i有效:)人们不应该这样写代码。力求清晰。这里的每个人都在关注
i++
部分,但是
++=
部分也很有趣。需要注意的是,
i+=i+i++
(即
i
)中左侧的值在右侧(
i+i++
)之前计算。在那一刻,
i
仍然是
0
。因此,评估实际上是
i=0+0+0
。请注意,如果使用
++i
,您确实会得到1。或者,如果顺序更改:
i+++i