JavaScript后置递增与赋值运算符优先级相关疑问求解
问题解答
该现象与运算符优先级规则完全不冲突,本质是混淆了「运算符优先级的作用」和「后置递增运算符本身的求值规则」两个概念,具体逻辑如下:
- 运算符优先级的作用是决定表达式的运算结合顺序:后置递增优先级高于赋值,意味着表达式
var j = i++会先运算i++部分,再将i++的运算结果赋值给j,而非先执行j = i再做递增,这一点完全符合优先级规则。 - 后置递增(
i++)的内置求值规则为:- 先返回变量当前的原始值作为整个表达式的返回结果
- 再对变量本身执行+1操作
所以在你的示例中:
- 初始
i = 1 - 运算
i++时,先返回原始值1作为该表达式的结果,随后i的值更新为2 - 赋值运算将
i++的返回值1赋值给j - 最终j的值为1,i的值为2,和运行结果一致。
如果换成优先级相同、但求值规则为「先+1再返回新值」的前置递增运算符++i,运行var j = ++i得到的j就会是2,这一差异和优先级无关,完全是运算符本身的行为定义不同。
补充验证:如果优先级规则不生效,运算顺序变成
(j = i)++,会因为j=i的返回结果是不可修改的右值直接抛出语法错误,也从侧面证明优先级规则确实在正常生效。
内容的提问来源于stack exchange,提问作者Steven
相关产品推荐
相关产品推荐

