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()转换类型函数。

posted on 2013-11-02 22:55  寒岁青松  阅读(56)  评论(0)    收藏  举报