首页 > 解决方案 > JavaScript 中的 POSTFIX 和 PREFIX 递增/递减优先级

问题描述

我已经编码多年,突然坚持一些简单的事情,即在递增/递减运算符的情况下运算符优先级。

根据https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence后缀递增/递减 的优先级高于前缀一。所以,我希望在表达

x = --a  + a++;  

将首先计算增量,然后才计算减量。但是,在测试中,这个表达式从左到右计算,就像运算符具有相同的优先级一样。结果 a=1;x = --a + a++ 等于 0 而不是 2。

好的。假设前缀/后缀运算符具有相同的优先级,我尝试用括号重新排序:

a=1;x = --a  + ( a++ )

但同样,结果将是 0 而不是我预期的 2。

有人可以解释一下吗?为什么这里的括号不影响任何东西?我怎样才能看到后缀的优先级高于前缀?

标签: javascriptoperator-precedence

解决方案


在表达式中,求值过程如下:

  1. --a被评估。变量a递减,--a因此的值为0
  2. a++被评估。得到的值a然后 a递增。a++因此的值为0
  3. 执行+操作,结果为0
  4. a的最终值为1

因为--aanda++位于较低优先级运算符的任一侧,所以+前递减和后递增之间的优先级差异无关紧要。运算符在+计算右侧子表达式之前计算左侧子表达式。


推荐阅读