Javascript 为什么运算符优先级为`和`高于`或`

Javascript 为什么运算符优先级为`和`高于`或`,javascript,Javascript,在 如果和高于或,1 | |警报(1)&警报(2)将发出警报,但不会发出警报 我认为他们在表情上是一样的: 1||0&&2 表达式与以下内容相同: 1||(0&&2)//because && has greater precedence than || 在这种情况下,1是真实值,因此得到1 因此,根据优先规则,这不会像下面这样: (1||0)&&2//because || has lesser precedence than &

如果
高于
1 | |警报(1)&警报(2)
将发出警报,但不会发出警报


我认为他们在表情上是一样的

1||0&&2
表达式与以下内容相同:

1||(0&&2)//because && has greater precedence than ||
在这种情况下,1是真实值,因此得到1

因此,根据优先规则,这不会像下面这样:

(1||0)&&2//because || has lesser precedence than &&
为什么运算符优先级
高于

因为这就是语言的定义。如果这让你感到困扰,那么请随意插入括号,让分组更清楚

许多其他语言都是这样工作的


记住哪个优先级更高的规则是将
&&
视为乘法,将
|
视为加法(从逻辑意义上讲,它们是加法)。当然,乘法比加法具有更高的优先级(绑定更紧密)。

原因很简单,乘法先于加法,我希望你知道。。。
是逻辑乘积,
是逻辑加法

因此,使用逻辑运算符,您可以重写操作
(a | | b&&c)
,例如:

a + b * c
如果a、b和c是布尔型的,并且你应用了正确的布尔运算,它会给出正确的结果。如果愿意,可以将其转换为一位二进制:

&& => 1 * 1 is true, all others are false

|| => 0 + 0 is false, all others are true

你为什么认为会是0?如果
具有更高的优先级,则它应该是1;如果
具有更高的优先级,则它也应该是1。@slebetman如果
|
具有更高的优先级,则它应该是
2
actually@zerkms:啊,没错,try是
1|||(警报(1))&警报(2)
1||(警报(1))&警报(2)
按预期返回
1
,并且不会发出任何警报。我认为您打算在两条注释中都写“更大”。因为顶部和底部的注释都表示&&具有更高的优先级(| |优先级较低意味着与&&具有更高的优先级相同)不。它只是表示&&具有更高的优先级。在这种情况下,示例2中的注释没有意义,因为在该示例中,大括号使| |具有更高的优先级,而不是更低的优先级。还是我误解了你的意思?我的意思是说,根据优先规则,表达式1 | | 0&&2将是1 | | |(0&&2)而不是(1 | | 0)&&2。是的。但第二个例子中的评论是什么意思?因为它是说“因为和&具有更大的优先性,N”,它与上面的注释相同,不仅仅是语言,而且在简单的数学中,我们认为“代码>和< /代码>比<代码>或更大的优先级。