javascript - 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。
有人可以解释一下吗?为什么这里的括号不影响任何东西?我怎样才能看到后缀的优先级高于前缀?
解决方案
在表达式中,求值过程如下:
--a
被评估。变量a
递减,--a
因此的值为0
。a++
被评估。得到的值a
,然后a
递增。a++
因此的值为0
。- 执行
+
操作,结果为0
。 a
的最终值为1
。
因为--a
anda++
位于较低优先级运算符的任一侧,所以+
前递减和后递增之间的优先级差异无关紧要。运算符在+
计算右侧子表达式之前计算左侧子表达式。
推荐阅读
- c++ - std::atomic::fetch_add 是 x86-64 上的序列化操作吗?
- sql - 有没有办法在解析 XML 数据时删除显式属性名称?
- javascript - 在 Map v3 API 中无法计算距离(两个坐标之间,不考虑骑行、驾驶等旅行模式)
- r - 选择要在 r shinyapps 中显示的滑块
- delphi - 将 cURL 标头转换为 Delphi TIdHTTP
- python - 带有 python 服务器和 sqlite 的网页
- javascript - 嵌套的 for 循环无法正确迭代
- mysql - mysql 从另一列中选择列值
- c# - Telegram Bot 使 InlineKeyboardMarkup 按钮无法点击
- ms-access - 在数组中查找某些信息