逻辑非!
-
用来对布尔值进行取反,即
!true = false
; -
当取反的变量不是布尔值,会进行隐式转换为布尔值:
- 非0的数字,都转换为true
- 非空字符串,转换为true
- 非空对象,转换为true
- Infinity = true
- 0,转换为false
- 空字符串,转换为false
- NaN = false
- null = false
- undefined = false
-
可以接连两次取反,即两个感叹号
!!
;
逻辑与&&
和逻辑或||
-
同数学意义上的与和或的概念一样;
-
逻辑与的优先级比逻辑或高;
-
短路运算,即运算符两端的两个逻辑表达式,当第一个逻辑表达式不符合条件时,就会得出结果,不会再去计算第二个逻辑表达式;
-
当逻辑表达式不是布尔值的结果时,会进行隐式转换为布尔值,但是最后运算结果,返回的不是布尔值,而是进行隐式转换之前的原结果;
上图可以很好的理解短路运算与隐式转换,来说明一下为什么是这样的输出结果:
上面逻辑运算符左右两边的两个逻辑表达式均为数字,非0的数字转为true,0转为false;
-
对于第一行代码,转换为
true && true
,左边为true不能确定逻辑与运算结果,得再去计算右边的,右边也为true,此时确定结果,并且最后计算停留在右侧,所以输出结果为右侧的原结果,即2; -
对于第二行代码,转换为
false && true
,左边为false可以直接确定逻辑与运算结果,此时计算停留在左侧,所以输出结果为左侧的原结果,即0; -
对于第三行代码,转换为
true || false
,左边为true可以直接确定逻辑或运算结果,此时计算停留在左侧,所以输出结果为左侧的原结果,即1; -
对于第四行代码,转换为
false || true
,左边为false不能直接确定逻辑或运算结果,得再去计算右边的,右边为true,此时确定结果,并且最后计算停留在右侧,所以输出结果为右侧的原结果,即1;
-