运算符

&&|||&

逻辑运算符如下表所示 (其中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
2
3
4
5
function (arg){
var a = arg || 5;
}
// 是否存在 不存在创建并赋值
(this._events[event] || (this._evnet[evnet] = [])).push(fn)
  • 简写
1
2
if(a==b){console.log(1)}
a==b&&console.log(1)

| &属于位运算符

此处不深究