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

问题描述 投票:0回答:4

在我能找到的所有 JavaScript 运算符优先级图表中(如 this onethis one),逻辑 AND (

&&
) 的优先级稍微高于逻辑 OR (
||
)。

我似乎无法找出结果与具有相同优先级时不同的表达式。我认为一定有某种方式让它发挥作用,否则如果没有,它们将被列为具有相同的优先级。

例如:

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
,但我认为这纯粹是通过从左到右的语义来解释的,而不是通过
&&
具有更高的优先级来解释。

我一定是错过了,对于什么表达式来说,

&&
||
具有更高的优先级重要?

javascript operators operator-precedence
4个回答
4
投票
true || false && false

true

(true || false) && false

false

true || (false && false)

true


3
投票

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

1 || 0 && 2

会是

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

而不是

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

我们从“通常”的优先规则中得到的。


对于您的结构

… || … && … || …
(这将是
(((… || …) && …) || …)
而不是正常的
((… || (… && …)) || …)
),对于像
0 0 1 0
这样的值,您会得到不同的结果。


为什么逻辑 AND 的优先级略高于逻辑 OR?

因此布尔表达式的规范形式,析取范式,不需要任何括号。


1
投票

示例:

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


0
投票

用代数方式回答这个问题很有趣:

(x | y) & z ≠ x | (y 和 z)

展开第一个括号内的术语:

(x 和 z) | (y & z) ≠ x | (y 和 z)

由于 y & z 等于自身,因此差值必定来自:

x 和 z ≠ x

如果 x = false 那么 x = true,则为 false,给出

真 & z ≠ 真

z ≠ 真

所以 z = false。

将 x = true, z = false 代入原始表达式:

(真 | y) & 假 ≠ 真 | (是和假)

因此 y 的任一值都表明了差异。

© www.soinside.com 2019 - 2024. All rights reserved.