javascript中的Boolean 运算符

在javascript中,&&和||的运算结果不是直接的bool变量

Boolean 运算符有三种:NOT、AND 和 OR。

在学习各种逻辑运算符之前,让我们先了解一下 ECMAScript-262 v5 规范中描述的 ToBoolean 操作。

抽象操作 ToBoolean 将其参数按照下表中的规则转换为逻辑值:

参数类型结果
Undefined false
Null false
Boolean 结果等于输入的参数(不转换)
Number 如果参数为 +0, -0 或 NaN,则结果为 false;否则为 true。
String 如果参数为空字符串,则结果为 false;否则为 true。
Object true

(1)逻辑 NOT 

在 ECMAScript 中,逻辑 NOT 运算符与 C 和 Java 中的逻辑 NOT 运算符相同,都由感叹号(!)表示。与逻辑 OR 和逻辑 AND 运算符不同的是,逻辑 NOT 运算符返回的一定是 Boolean 值。

逻辑 NOT 运算符的行为如下:

  • 如果运算数是对象,返回 false
  • 如果运算数是数字 0,返回 true
  • 如果运算数是 0 以外的任何数字,返回 false
  • 如果运算数是 null,返回 true
  • 如果运算数是 NaN,返回 true
  • 如果运算数是 undefined,发生错误

(2)逻辑 AND 

逻辑 AND 运算的运算数可以是任何类型的,不止是 Boolean 值。

如果某个运算数不是原始的 Boolean 型值,逻辑 AND 运算并不一定返回 Boolean 值:

  • 如果一个运算数是对象,另一个是 Boolean 值,返回该对象。
  • 如果两个运算数都是对象,返回第二个对象。
  • 如果某个运算数是 null,返回 null。
  • 如果某个运算数是 NaN,返回 NaN。
  • 如果某个运算数是 undefined(未被声明的变量),发生错误。(除非被短路计算忽略,如 false&&x ,其中x并未被定义)

    PS:当声明了变量但未对其进行初始化,该变量的默认值为undefined,这时并不会发生错误。如 var x; alert(true && x);//会弹出 undefined,说明返回值为undefined

 

(3)逻辑 OR

   如果某个运算数不是 Boolean 值,逻辑 OR 运算并不一定返回 Boolean 值:

  • 如果一个运算数是对象,并且该对象左边的运算数值均为 false,则返回该对象。
  • 如果两个运算数都是对象,返回第一个对象。
  • 如果最后一个运算数是 null,并且其他运算数值均为 false,则返回 null。
  • 如果最后一个运算数是 NaN,并且其他运算数值均为 false,则返回 NaN。
  • 如果某个运算数是 undefined,发生错误(除非被短路计算忽略,如 true||x ,其中x并未被声明)。

短路计算:

     &&  当第一个表达式为false,就不会去处理第二个表达式,直接返回结果。

      ||  当第一个表达式为true,就不会去处理第二个表达式,直接返回结果。

 

实例(1):

a=a||"defaultValue"; 

上面语句的等价表达:

if(!a){
    a="defaultValue";
}

和:

if(a==null||a==""||a==undefined){
    a="defaultValue";
}

实例(2):

jQuery.extend = jQuery.fn.extend = function() {
     var src, copyIsArray, copy, name, options, clone,
      target = arguments[0] || {},
       i = 1,
       ……

  }

posted @ 2016-02-23 14:26  anoorshan  阅读(811)  评论(0)    收藏  举报