有人能解释一下原因吗;运算符优先级“;适用于逻辑运算符,如||&引用&引用&&&引用;在javaScript中

有人能解释一下原因吗;运算符优先级“;适用于逻辑运算符,如||&引用&引用&&&引用;在javaScript中,javascript,logical-operators,operator-precedence,short-circuiting,short-circuit-evaluation,Javascript,Logical Operators,Operator Precedence,Short Circuiting,Short Circuit Evaluation,有人能解释一下为什么运算符优先级适用于JavaScript中的逻辑运算符,如|和&?在这样的操作中,这意味着什么: true | |false&&false 首先计算false&&false,因为&运算符的优先级高于JavaScript中的|运算符。据我所知,JavaScript引擎不会计算false&&false,因为在| | |操作符之前有一个true文本,当操作符之前有true时,|操作符之后的东西将不会被计算,这被称为JavaScript中的“逻辑运算符短路”另一个示例是: true |

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

true | |false&&false

首先计算
false&&false
,因为
&
运算符的优先级高于JavaScript中的
|
运算符。据我所知,JavaScript引擎不会计算
false&&false
,因为在| | |操作符之前有一个
true
文本,当
操作符之前有
true
时,
|
操作符之后的东西将不会被计算,这被称为JavaScript中的“逻辑运算符短路”另一个示例是:

true |alert()

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

真| |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)


您有两个部分,求值顺序和优先级。优先级表示
true | | false和&false
等于
true | | |(false和&false)
而不是
(true | false)&&false
。您可以看到表达式外的树是如何构建的,然后根据求值顺序对该树求值。因此,您的意思是这里发生的事情完全是求值顺序的结果运算符的
不是运算符的求值顺序,而是表达式的求值顺序。有一个具有运算符优先级的表达式,用于定义运算符和操作数的分组方式。你有一个求值顺序,它定义了那些由操作符优先级定义的分组的求值顺序,如果有提前退出的情况,已经求值的部分足以知道表达式的结果。我将重写注释作为答案。在这里,但我需要一些时间。由于编辑和合并注释是不可能的,整个过程变得混乱和误导。但是如果
|
运算符的正确操作具有更高的优先级,为什么不首先计算该操作