AND (&&) 优先于 OR (||) 的表达式示例?

Example of expression where the precedence of AND (&&) over OR (||) matters?

在我能找到的所有 JavaScript 运算符优先级图表中(如 this one and this one),逻辑与 (&&) 有 略微 逻辑或 (||).

的优先级更高

我似乎无法找出结果与它们具有相同优先级时不同的表达式。我认为必须有某种方式让它变得重要,否则如果它们不重要,它们将被列为具有相同的优先级。

例如:

0 || 2 && 0 || 3

3,但不管我如何分割它,它总是 3:

(0 || 2) && 0 || 3

0 || (2 && 0) || 3

(0 || 2 && 0) || 3

0 || 2 && (0 || 3)

0 || (2 && 0 || 3)

如果我先 0 做其他事情(比如 4),结果总是 4 因为第一个 || 甚至不看右手边。如果我在最后 || 左右交换 03,结果仍然是 3.

我最接近的是

0 || false && "" || NaN

...这是 NaN,而

0 || false && ("" || NaN)

...是 false,但我认为这纯粹是通过从左到右的语义来解释的,而不是通过 && 更高的优先级来解释的。

我一定是错过了它,因为 && 的优先级高于 || 有什么关系呢?

如果它们具有相同的优先级并且是左结合的,那么例如表达式

1 || 0 && 2

会是

((1 || 0) && 2) // evaluates to 2

而不是

(1 || (0 && 2)) // evaluates to 1

我们从 "usual" 优先规则中得到。


对于您的结构 … || … && … || …(应该是 (((… || …) && …) || …) 而不是正常的 ((… || (… && …)) || …)),对于 0 0 1 0.[=19 这样的值,您会得到不同的结果=]


Why does the logical AND have slightly higher precedence to the logical OR?

因此布尔表达式的规范形式 disjunctive normal form 不需要任何括号。

true || false && false

true

(true || false) && false

false

true || (false && false)

true

示例:

1 || 0 && 0 -> (1 || 0) && 0 -> (1) && 0 -> 0
1 || 0 && 0 -> 1 || (0 && 0) -> 1 || (0) -> 1