今天通过学习@wenrunchang123及@_雨落1226的博客,了解到一个概念,叫做短路运算。
首先,需要了解,在逻辑运算中,对应boolean值为false的情况包括0,"",null,undefined,NaN,false;其余值都对应true。
&&运算
a && b : 如果a表达式,不是布尔类型,先隐式转换为布尔值,如果为true,无论b为true或者false,都返回b的值;如果为false,则返回a的值
console.log(5-2 && 9); [Web浏览器] "9"
console.log(false && 9); [Web浏览器] "false"
||运算
a || b : 通过隐式转换得到a的boolean 值,如果为true,则无论b的值为false或者true,都返回a的值;如果a的boolean值为false,则返回b的值
console.log(8-1 || 3); [Web浏览器] "7"
console.log(8-NaN || 3); [Web浏览器] "3"
&& 与 || 的优先级比较
结论:&&运算优先级高于||运算
console.log(3 && 9 || 3 &&7); [Web浏览器] "9" 先计算两边的&&运算,再计算中间的||运算;
()运算可以改变||运算的优先级
console.log(3 && (9 || 3) &&7); [Web浏览器] "7" ()运算改变了||运算的优先级,先计算||,再计算&&