谁能解释一下为什么 "operator precedence" 适用于 javaScript 中的“||”、“&&”等逻辑运算符

Can someone explain me why "operator precedence" applies to logical operators like "||", "&&" in javaScript

谁能解释一下为什么运算符优先级适用于 JavaScript 中的 ||&& 等逻辑运算符?这在像这样的操作中意味着什么:

真||假&&假

首先计算 false && false,因为 && 运算符的优先级高于 JavaScript 中的 || 运算符。据我所知,false && false 未被 JavaScript 引擎评估,因为在 || 之前运算符有一个 true 文字,当 || 运算符之前的内容是 true 时, || 运算符之后的内容将不会被评估,这在中称为 "short-circuiting of logical operators" JavaScript 另一个例子是:

真||警报()

即使函数调用的优先级高于 || 运算符,函数调用也不会发生,另一个例子是

真|| x = 7

如果在 JavaScript 中逻辑运算符短路是真的,那么上面的代码不能给出错误,因为 x = 7 没有被评估,因为之前|| 运算符有一个 true 文字。

运算符优先级只决定分组,而不是实际的评估顺序:

  • true || false && false 变为 true || (false && false) 但仍然从左到右求值。

  • true || alert() 被评估为 true || (alert()) 而不是 (true || alert)()

  • true || x = 7 被评估为 (true || x) = 7 并导致错误,而不是 true || (x = 7)