关于逻辑运算符的优先级的问题

时间:2019-03-23 14:34:54

标签: javascript

以下代码显示3.为什么?你能解释为什么吗?

alert( null || 2 && 3 || 4 );

&&的优先级是否高于||?操作员?为什么它不显示2?

4 个答案:

答案 0 :(得分:1)

评估顺序为

null || (2 && 3) || 4
null ||     3    || 4
      3          || 4
            3

logical AND &&operator precedencelogical OR ||高。

console.log(null || 2 && 3 || 4); // 3

答案 1 :(得分:1)

  

&&的优先级是否高于||?运算符?

是的。这称为operator precedence。您可以在MDN上找到table for JS operators

您的表情被评估为

alert((null || (2 && 3)) || 4);

要获得从左到右的评估,您需要编写

alert((null || 2) && 3 || 4 );

答案 2 :(得分:0)

如果||运算符返回 fassy 值,则会运行下一个操作数。

如果&&运算符返回 truthy 值,则会运行下一个操作数。

否则,请停止进一步操作。

所以

- null || // false, go further
- 2 && // true, go further
- 3 || // true, stop

因此,最终返回3。

编辑:

如果您谈论运算符的优先级,则可以查看operator precedence。您可以在其中看到&&运算符的优先级值为6,而||运算符的优先级值为5。因此,&&运算符的顺序更高。

答案 3 :(得分:0)

&&运算符优先级高于||。因此,null || 2 && 3 || 4表达式实际上与null || (2 && 3) || 4相同。

让我们逐步评估整个表达式:

  1. null是一个伪造的值,因此请检查下一个操作数
  2. (2 && 3)得出3,这是一个真实值,它在此处停止并返回3