布尔操作符
逻辑非
无论数值是什么数据类型,这个操作符都会返回一个布尔值,遵循下列规则:
- 如果操作数是一个对象,返回false
- 如果操作数是一个空字符串,返回true
- 如果操作数是一个非空字符串,返回false
- 如果操作数是数值0,返回true
- 如果操作数是任意非0 数值(包括Infinity),返回false
- 如果操作数是null或NaN或undefined,返回true
同时使用两个逻辑非操作符,实际上就会模拟Boolean()转型函数的行为
逻辑与
逻辑与操作可以应用于任何类型的操作数,而不仅仅是布尔值。
在有一个操作数不是布尔值的情况下,逻辑与操作就不一定返回布尔值,逻辑与规则如下:
- 如果第一个操作数是对象,则返回第二个操作数
- 如果第二个操作数是对象,则只有在第一个操作数的求值结果为true 的情况下才会返回该对象
- 如果两个操作数都是对象,则返回第二个操作数
- 如果有一个操作数是null,则返回null
- 如果有一个操作数是NaN,则返回NaN
- 如果有一个操作数是undefined,则返回undefined
逻辑与操作属于短路操作,即如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值
javascript
var found = false;
var result = found && someUndefinedVariable; // 不会发生错误
alert(result); // 会执行("false")
found为false,所以不必在乎someUndefinedVariable
然而
javascript
var found = true;
var result = found && someUndefinedVariable; // 这里会发生错误
alert(result); // 这一行不会执行
found为true,仍需要进行判断someUndefinedVariable的数值,报错
逻辑或
与逻辑与操作相似,如果有一个操作数不是布尔值,逻辑或也不一定返回布尔值
逻辑或规则:
- 如果第一个操作数是对象,则返回第一个操作数
- 如果第一个操作数的求值结果为false,则返回第二个操作数
- 如果两个操作数都是对象,则返回第一个操作数
- 如果两个操作数都是null,则返回null
- 如果两个操作数都是NaN,则返回NaN
- 如果两个操作数都是undefined,则返回undefined
与逻辑与操作符相似,逻辑或操作符也是短路操作符