2.5.3布尔操作符
布尔操作符一共有3个:非(NOT)、与(AND)、或(OR)。
2.5.3.1 逻辑非
逻辑非操作符由一个叹号(!)表示,可以应用于ECMAScript中的任何值。无论这个值是什么数据类型,这个操作符都会返回一个布尔值。逻辑非操作符首先会将它的操作数转换为一个布尔值,然后在对其求反。逻辑非操作符遵循下列规则:
1.如果操作数是一个对象,返回false;
2.如果操作数是一个空字符串,返回true;
3.如果操作数是一个非空字符串,返回false;
4.如果操作数是数值0,返回true;
5.如果操作数是任意非0数值,返回false;
6.如果操作数是null,返回true;
7.如果操作数是NaN,返回true;
8.如果操作数是undefined,返回true;
下面例子展示应用上述规则的结果:
alert(!false); // true
alert(!"blue"); // false
alert(!0); // true
alert(!NaN); // true
alert(!""); // true
aler t(!12345); // false
逻辑非操作符可用于将一个值转换为与其对应的布尔值。而同时使用两个逻辑非操作符,实际上就会模拟Boolean()转型函数的行为。
2.5.3.2 逻辑与(&&)
逻辑与操作符由两个和号(&&)表示,有两个操作数,例如:varresult=true&&false;
逻辑与的真值表如下:
逻辑与操作可以应用于任何类型的操作数,而不仅仅是布尔值。在有一个操作数不是布尔值的情况下,逻辑与操作就不一定返回布尔值;它遵循下列规则:
(1) 如果第一个操作数是对象,则返回第二个操作数;
(2) 如果第二个操作数是对象,则只有在第一个操作数的求值结果位true的情况下才会返回该对象;
(3) 如果两个操作数都是对象,则返回第二个操作数;
(4) 如果一个操作数是null,则返回null;
(5) 如果有一个操作数是NaN,则返回NaN;
(6) 如果有一个操作数是undefined,则返回undefined。
逻辑与操作属于断路操作,即如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值。对于逻辑与操作,如果第一个操作数是false,则第二个操作数是什么值,结果都不在可能是true。PS:不能在逻辑与操作中使用未定义的值。
2.5.3.3 逻辑或(||)
逻辑或操作符由两个竖线符号(||)表示,有两个操作数。例如:varresult=true || false。
逻辑或的真值表如下:
如果有一个操作数不是布尔值,逻辑或也不一定返回布尔值,它遵循下列规则:
(1) 如果第一个操作数是对象,则返回第一个操作数;
(2) 如果第一个操作数的求值结果为false,则返回第二个操作数;
(3) 如果两个操作数都是对象,则返回第一个操作数;
(4) 如果两个操作数都是null,则返回null;
(5) 如果两个操作数都是NaN,则返回NaN;
(6) 如果两个操作数都是undefined,则返回undefined。
逻辑或操作符也是短路操作符。如果第一个操作数的求值结果位true,就不会对第二个操作数求值。