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
因为第一个 ||
甚至不看右手边。如果我在最后 ||
左右交换 0
和 3
,结果仍然是 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
在我能找到的所有 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
因为第一个 ||
甚至不看右手边。如果我在最后 ||
左右交换 0
和 3
,结果仍然是 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