逻辑与 (&&) 和逻辑或 (||) 的运算符优先级

abr*_*raj 1 javascript operator-precedence

根据JavaScript 的运算符优先级表,我可以看到 的&&优先级高于||.

因此,对于以下代码片段:

let x, y;
let z = 5 || (x = false) && (y = true);
console.log(z);  // 5
console.log(x);  // undefined 
console.log(y);  // undefined 
Run Code Online (Sandbox Code Playgroud)

我认为&&应该首先评估该部分,然后在该部分短路后&&x将被分配值false。然后,||才会尝试进行评估。

但是,从 的输出中console.log,我可以清楚地看到这里的情况并非如此。

有人可以帮我吗?我在这里缺少什么?

提前致谢。

Cer*_*nce 5

&&of 的运算符优先级||意味着:

let z = 5 || (x = false) && (y = true);
Run Code Online (Sandbox Code Playgroud)

被评估为:

let z = 5 || ((x = false) && (y = true));
Run Code Online (Sandbox Code Playgroud)

而不是作为

let z = (5 || (x = false)) && (y = true);
Run Code Online (Sandbox Code Playgroud)

它并不指示何时计算运算符每一侧的值。这是由每个操作员的机制来完成的。例如,对于||,它在此处指定

let z = 5 || (x = false) && (y = true);
Run Code Online (Sandbox Code Playgroud)

它在运行GetValue(lref)之前进行评估GetValue(rref)

换句话说,运算符优先级指示哪些标记应用于哪个运算符以及以什么顺序,但不指示给定运算符如何/何时计算其左侧和右侧的值。