javascript逻辑运算符的关联性和优先级

178 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

javascript逻辑运算符的关联性和优先级

javascript的逻辑运算符其实更像一种选择器,会选择左右个值作为返回值而不是返回true或false

逻辑运算符的关联性优先级

· &&:采取左关联,优先级高于|| 高于 ?

· || : 采用左关联,优先级低于&&高于?

· ?: 采用右关联,优先级低于前两者。

验证:当两个逻辑运算符,三个操作数时,就会有运算符表达式的执行顺序(优先级)

var a = 42;

var b = ‘foo’;

var c = false;

a&&b||c; //foo

a||b&&c;//42

·因为&&的优先级高于||,所以结果不言而喻。

tip:&&运算符有一个很好的特性,即短路因为当左边表达式为假时,就不会对后边的表达式进行运算。一般用于 if(opts&&opts.cool),当没有opts时,表达式opts.cool会出错,这样用逻辑运算符连接,就起到了保护作用,同样也起到了不必要的代码运算。

·当三种逻辑运算符结合在一起使用就会牵扯优先级,其实更可以认为是更强的绑定。以下是示例可以解释各自的关联性,及优先级。

示例1

var a = 1 var b = 'foo' var c = false\

console.log(a && b || c && a || b && c || b && a);//结果为foo\

解析

其实经过了这几步:1.根据关联性进行关联//{[ (a&&b) || (c&&a) ] || (b&&c)} || (b&&a)

  1. 执行顺序从左到右执行 foo false false 1

  2. 结果 foo

实例2:console.log(a && b || a || c && b ? b || c && a ? a || b : a && b : a && b);

解析

步骤:1.(a && b) || a || (c && b) ? (c && a)? (a || b) : (a && b) : (a || b)

2.(a && b) || a || (c && b) {? (c && a)[? (a || b) : (a && b)] : (a || b)}

  1. foo fales false 1 foo 1

  2. foo ? foo ? 1 : foo : foo

  3. foo ? 1 : foo

  4. 1

复杂的逻辑运算符的结合按照先结合&&用括号标注,然后是 || ,均为左关联,然后是三元运算符?按照右关联。 tips:a||b&&c?a:b,这个的正确表达意思是,(a||b&&c)表达式结果是?的条件,而不是c是?的条件,?按照右关联,所以总起是这样 { [ a || (b&&c) ] ? a : b }