1. 对于逻辑与(&&),它操作于两个数,其返回结果不一定是boolean值,它遵循下列规则:
1) 如果第一个操作数是对象,则返回第二个操作数;
2) 如果第二个操作数是对象,则只有在第一个操作数的求值结果为true 的情况下才会返回该对象;
3) 如果两个操作数都是对象,则返回第二个操作数;
4) 如果有一个操作数是null,则返回null;
5) 如果有一个操作数是NaN,则返回NaN;
6) 如果有一个操作数是undefined,则返回undefined。
new Date() && true //true new Date() && false //false true && 'aaa' //"aaa" false && 'aaa' //false new Date() && 'aaa' //"aaa" null && true //null undefined && true //undefined NaN && true //NaN
2. 对于逻辑或,它同样操作两个数,其返回结果也不一定是boolean值,它遵循下列规则:
1) 如果第一个操作数是对象,则返回第一个操作数;
2) 如果第一个操作数的求值结果为false,则返回第二个操作数;
3) 如果两个操作数都是对象,则返回第一个操作数;
4) 如果两个操作数都是null,则返回null;
5) 如果两个操作数都是NaN,则返回NaN;
6) 如果两个操作数都是undefined,则返回undefined。
3. 对于非操作符(!),无论它应用于什么数据类型的值时,结果都返回boolean类型的值。逻辑非操作符现将它的操作数转换为布尔值,在对其求反。
逻辑非遵循下列规则:
1) 如果操作数是一个对象,返回false;
2) 如果操作数是一个空字符串,返回true;
3) 如果操作数是一个非空字符串,返回false;
4) 如果操作数是数值0,返回true;
5) 如果操作数是任意非0 数值(包括Infinity),返回false;
6) 如果操作数是null,返回true;
7) 如果操作数是NaN,返回true;
8) 如果操作数是undefined,返回true。
其实,如果对一个数据同时使用两个非操作符,就相当于Boolean()转换类型函数。
浙公网安备 33010602011771号