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
。