运算符
&&
和 ||
和 |
和 &
逻辑运算符如下表所示 (其中expr可能是任何一种类型, 不一定是布尔值):
&& 优先级高于 ||
如果一个值可以被转换为 true,那么这个值就是所谓的 truthy,如果可以被转换为 false,那么这个值就是所谓的 falsy。
会被转换为 false 的表达式有:
- null;
- NaN;
- 0;
- 空字符串(”” or ‘’ or ``);
- undefined。
尽管 && 和 || 运算符能够使用非布尔值的操作数, 但它们依然可以被看作是布尔操作符,因为它们的返回值总是能够被转换为布尔值。如果要显式地将它们的返回值(或者表达式)转换为布尔值,请使用双重非运算符(即!!)或者Boolean构造函数。
短路计算
由于逻辑表达式的运算顺序是从左到右,也可以用以下规则进行”短路”计算:
(some falsy expression) && (expr) 短路计算的结果为假。
(some truthy expression) || (expr) 短路计算的结果为真。
常见用法判断对象属性是否存在
1 | if(obj.prop&&obj.prop.prop) |
- 赋值
1 | function (arg){ |
- 简写
1 | if(a==b){console.log(1)} |
|
&
属于位运算符
此处不深究