多言多败,多事多害。——《训蒙增广》
简介
在 JavaScript 中使用 if 的时候,自己如果不注意的话很可能出现判断进错,其实在 JavaScript 中只有`固定的几个值会转为 false,其它的统一认为为 true。
false
null
undefined
空字符串' '
数字零 0
NaN
其他的全部都算为 true,'false'
、'0'
也是为 true,其实这也是一种隐性的类型转换。和 == 又有不同。
逻辑运算符
由于逻辑表达式是从左往右
计算的,由于运算符优先级的存在,下面的表达式的结果却不相同。如下例所示
1 | (false && true) || true; // 结果为 true |
右侧被小括号括起来的操作变成了独立的表达式。转换规则
:
- 将 AND 转换为 OR
- 将 OR 转换为 AND
- 删除嵌套的 AND
- 删除嵌套的 OR
可参考 >https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Logical_Operators
逻辑与(&&)
尽管 &&
和 ||
运算符能够使用非布尔值
的操作数, 但它们依然被看作是布尔操
作符,因为它们的返回值总是能够被转换为布尔值
。
expr1 && expr2
如果expr1
能转换为false
则返回expr1
,否则返回expr2
。因此,与布尔值一起使用时,如果两个
操作数都为true
时&&
返回true
,否则返回false
.
1 | a1 = true && true; // t && t 结果为 true |
逻辑与(||)
expr1 && expr2
如果expr1
能转换为true
则返回expr1
,否则返回expr2
。因此,与布尔值一起使用时,如果任意一个
操作数为true
时||
返回true
.
1 | o1 = true || true; // t || t 结果为 true |
逻辑非(!)
!expr 如果单个表达式能转换为true
的话返回false
,否则返回true
。
1 | n1 = !true; // !t 结果为 false |
总结
在 JavaScript 中使用 if 的时候,自己如果不注意的话很可能出现判断进错,其实在 JavaScript 中只有固定的几个值会转为 false,其它的统一认为为 true
。
false
null
undefined
空字符串' '
数字零 0
NaN