只有三种逻辑运算符:
&&
||
!
注意:
&&
和||
都有短路的效果
一. !
逻辑非
逻辑非的运算逻辑是,不管什么类型,先转换成
Boolean
值,再取反得到最终的结果。取反的意思就是
true
变false
,false
变true
他的运算结果总是布尔值.
console.log(!true);
console.log(!false);
console.log(!null);
console.log(!undefined);
console.log(!1);
console.log(!0);
console.log(!"abc");
二. &&
短路与
只要有一个是
false
, 结果就是false
.只有当两个都是
true
的时候结果才是true
.短路性: 如果第一个是
false
, 则不会再计算第二个.
三. ||
短路或
只要有一个是
true
, 结果就是true
只有当两个都是
true
的时候结果才是true
短路性: 如果第一个是
true
, 则不会再计算第二个.
四. js中&&和||
的牛逼之处
在其他很多语言中, &&
和||
只能对布尔值进行计算
但是在js中, 任何类型的数据都会参与运算, 得到的结果也可以是任意的类型.
如果有不是布尔值参与了运算, 则会根据前面讲的规则,把它当成true
或false
来用.
最终结果的规则:
如果第一个能决定最终的结果, 则结果就是第一个的值, 否则就是第二个.
console.log(100 && 0); // 100 可以当true来用, 所以不能决定最终结果 最终结果是 0
console.log(NaN && 0); // NaN 可以当false来用, 所以能决定最终结果 最终结果是 NaN
console.log("" && true); // "" 可以当false来用, 所以能决定最终结果 最终结果是 ""
console.log("" || true); // "" 可以当false来用, 所以不能决定最终结果 最终结果是 true
console.log(null || "abc"); // null可以当false来用, 所以不能决定最终结果 最终结果是 abc