【发布时间】:2021-08-04 20:45:27
【问题描述】:
我得到了这个代码:
let x = -2;
let ex = ((x += 10) > ++x) * 2;
console.log(ex);
试图弄清楚为什么控制台中的输出是 0,而我认为应该是 2?这是我的理由:
当我在 MDN 中引用优先顺序时,我还需要在这里考虑双括号。这意味着这就是我优先处理我的行动的方式:
-
+=(在双括号中)//我得到一个值 8 -
++(根据全局括号中的第二高优先级)//我得到-1 -
>(第三优先级)//此时我将 8 与 -1 (8 > -1) = true 进行比较,这意味着该值现在变为 1 -
*(最后一个)//1 * 2 = 2
以上是我自己的思考过程。你能解释一下为什么我最后应该得到 0 吗?直观地说,就是括号中的布尔值需要为false,才能转换为0。然后0 * 2 = 0。
谢谢。
【问题讨论】:
-
x+=10在++x之前变异x。 -
我现在明白了!第一次操作后 x 已更改为 8。我们使用 8 而不是 -2 向前移动。谢谢!
-
运算符优先级和评估顺序是两个不同的东西。比较
(++x < (x += 10)) * 2;,它使用相同的优先规则,但具有不同的评估顺序。
标签: javascript operators operator-precedence