JavaScript自增自减运算符运算结果存疑,请求专业解惑
解析自增自减表达式的运算误区
先看你给出的代码:
let i = 1; i = i++ - --i + ++i - i--; console.log(i);
执行结果为0,你的预期和实际运算值不符,核心误区在于对自增自减的变量修改时机和表达式运算顺序+最终赋值的理解偏差,下面一步步拆解:
运算全程拆解(初始i=1)
第一步:
i++- 后自增规则:先返回当前变量值
1,再将i自增为2 - 此时表达式已计算部分:
1 - --i + ++i - i--,当前i=2
- 后自增规则:先返回当前变量值
第二步:
--i- 前自减规则:先将i从
2自减为1,再返回修改后的值1 - 此时表达式已计算部分:
1 - 1 + ++i - i--,当前i=1
- 前自减规则:先将i从
第三步:
++i- 前自增规则:先将i从
1自增为2,再返回修改后的值2 - 此时表达式已计算部分:
1 - 1 + 2 - i--,当前i=2
- 前自增规则:先将i从
第四步:
i--- 后自减规则:先返回当前变量值
2,再将i自减为1 - 此时表达式完整计算结果:
1 - 1 + 2 - 2 = 0
- 后自减规则:先返回当前变量值
最终赋值
- 整个表达式的结果
0会赋值给变量i,覆盖掉第四步自减后的i=1,所以最终console.log(i)输出0
- 整个表达式的结果
你的核心理解误区
- 误区1:错误地认为自增自减的“生效”是和初始值绑定的独立链条,实际上每一次自增/自减操作都会立即修改变量本身,后续所有操作都基于修改后的最新变量值,而不是你预设的初始值推导链条
- 误区2:忽略了整个表达式计算完成后,会把最终结果重新赋值给i,这一步会覆盖掉最后一次自增/自减操作后的值
内容的提问来源于stack exchange,提问作者namco
相关产品推荐
相关产品推荐

