布尔值操作符与相等性操作符同样重要,可用于if-else和循环语句。 布尔操作符一共有3个:逻辑非、逻辑或和逻辑与
1、逻辑非
逻辑非由一个叹号(!
)表示,始终返回一布尔值,遵循以下规则:
- 如果操作数是对象,则返回false
- 如果操作数是空字符串,则返回true
- 如果操作数是非空字符串,则返回false
- 如果操作数是数值0,则返回true
- 如果操作数是非0数值(包括Infinity),则返回false
- 如果操作数是null,则返回true
- 如果操作数是NaN,则返回true
- 如果操作数是undefined,则返回true
验证以上描述:
注:同时使用两个叹号(!!
)相当于调用了转型函数Boolean()。无论操作数是什么类型,第一个叹号总会返回布尔值,第二个叹号对该布尔值进行取反,从而给出真正对应的布尔值
2、逻辑与
当且仅当所有的操作数为true
时,一组布尔操作数的逻辑与(&&
,逻辑连接)运算结果为true
,否则为false
一般来说,当从左到右求值时,该操作符返回第一个假值
操作数的值;如果它们都是真值
,则返回最后一个操作数的值
逻辑与操作符由两个和号(&&
)表示,应用到两个值
逻辑与操作符遵循以下真值表:
逻辑与操作符可用于任何类型的操作数,不限于布尔值。如果操作数不是布尔值,则返回不一定是布尔值,如下:
- 如果第一个操作数是对象,则返回第二个操作数
- 如果第二个操作数是对象,则只有第一个操作数求值为true才会返回该对象
- 如果两个操作数都是对象,则返回第二个操作数
- 如果有个操作数是null、NaN、undefined,则返回对应的null、NaN、undefined
逻辑与操作符是一种短路操作符,意思就是如果第一个操作数决定了结果,那么永远不会对第二个操作数求值。如果第一个操作数是false,那么无论第二个操作数是什么值,结果都不可能等于true
3、逻辑或
逻辑或是由两个管道符(||
)表示,遵循如下真值表:
与逻辑与类似,如果有一个操作数不是布尔值,则不一定会返回布尔值,遵循如下规则:
- 如果第一个操作数是对象,则返回第一个操作数
- 如果第一个操作数求值是false,则返回第二个操作数
- 如果两个操作数都是对象,则返回第一个操作数
- 如果两个操作数都是null、NaN、undefined,则返回对应的null、NaN、undefined
同样逻辑或也有短路特性,当第一个操作数为true时,第二个操作数就不会被求值了