javascript - JS中使用双括号的运算符优先级
问题描述
我得到了这个代码:
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
。
谢谢。
解决方案
如果您一次只看一个表达式,这是有道理的:
let x = -2;
// x = -2
let ex = (
( x+= 10)
// x = 8 (which is what this expression returns)
>
++x
// x = 9 (which is what this expression returns)
) * 2:
// In other words:
let ex = (8 > 9) * 2;
// which results in 0
运算符优先级很重要,是的,但这并不意味着 VM 会突然预先计算>
. 在计算二元运算符表达式时,它总是先计算左侧,然后再计算右侧。(除了例如&&
可能跳过右侧的地方)。
推荐阅读
- php - Codeigniter:将数据从模型传递到控制器,但没有进入视图文件
- mongodb - Mongodb : Get first result that match conditions in a group stage aggregation
- javascript - Fabric js pinch to zoom
- android - 在 RecyclerView 中保存 Checkbox 的状态
- typescript - 打字稿通用参数比较
- jquery - 当元素完全在视图中时,使用 .each() 运行单独的函数
- python-3.x - Spark中将Parquet字节数据帧转换为UTF-8
- reactjs - Line 16: React Hook "useState" is called conditionally
- sql - SQL 中的 PIVOT 问题
- java - 使用 Collectors.toMap 或 groupingBy 在 Map 中收集地图操作的结果