JS基本概念 -- 操作符 -- 布尔操作符

布尔操作符一共有三个: 非(Not)、与(AND)、或(OR)

  1. 逻辑非逻辑非操作符由一个叹号(!)表示,可以应用于ECMAScript中的任何值。无论这个值是什么类型,这个操作符都会返回一个布尔值。逻辑非操作符首先将他的操作数转换为一个布尔值,对其求反。
    //1.如果操作数是一个对象,返回false
    var o = {
        name: "ss"
    };
    alert(!o);    //false
    
    var o1 = {};
    alert(!o1);    //false
    
    //2.如果操作数是一个空字符串,返回true
    var str1 = "";
    alert(!str1);    //true
    
    //3.如果操作数是一个非空字符串,返回false
    var str2 = "name";
    alert(!str2);    //false
    
    //4.如果操作数值是0,返回true
    var num = 0;
    alert(!num);    //true
    
    //5.如果操作数是任意非0数值(包括Infinity),返回false
    var num1 = 23;
    alert(!num1);    //false
    
    var num2 = Number.MAX_VALUE * Number.MAX_VALUE;
    alert(!num2);    //false
    
    //6.如果操作数是null,返回true
    var str3 = null;
    alert(!str3);    //true
    
    //7.如果操作数是NaN,返回true
    var str4 = "ccc";
    str4++;
    alert(str4);    //NaN
    alert(!str4);    //true
    
    //8.如果操作数是undefined,返回true
    var val;
    alert(val);    //undefined
    alert(!val);//true

    逻辑非操作符也可用于将一个值转换为与其对应的布尔值。而同时使用两个逻辑非操作符,实际上就会模拟Boolean()转型函数的行为。最终结果与对这个值使用Boolean()函数相同。

    alert(!!"blue"); //true
    alert(!!0);        //false
    alert(!!NaN);    //false
    alert(!!"");    //false
  2. 逻辑与

    逻辑与操作符由两个和号(&&)


    逻辑与属于短路操作,即如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值。对于逻辑与操作而言,如果第一个操作数是false,则无论第二个操作数是什么值,结果都不在可能是true。

    var found = true;
    var result = (found && someUndefinedVariable);    //这里会发生错误
    alert(result);    //这一行不会执行
    //上述代码会发生错误,因为变量someUndefinedVariable没有声明。由于found的值是true,所以逻辑与操作符会继续对后面的变量求值。
    
    var found1 = false;
    var result1 = (found1 && someUndefinedVariable);    
    alert(result1);    //false
  3. 逻辑或

    逻辑或操作符由两个竖线符号( || )表示,有两个操作数。

    逻辑或操作符也是短路操作,如果第一个操作数的求值结果为true,就不会对第二个操作数求值了。

    var found = false;
    var result = (found || someUndefinedVariable);    //这里会发生错误
    alert(result);    //这一行不会执行
    //上述代码会发生错误,因为变量someUndefinedVariable没有声明。由于found的值是false,所以逻辑与操作符会继续对后面的变量求值。
    
    var found1 = true;
    var result1 = (found1 || someUndefinedVariable);    
    alert(result1);    //true

    我们可以利用逻辑或的这一行为来避免为变量赋null 或 undefined值。

    var preferrdObject;
    var backupObject = "ccc"
    
    var myObject = preferrdObject || backupObject;
    alert(myObject);    //ccc
    /*
     *变量myObject将被赋予等号后面两个值中的一个。变量preferrdObject会优先赋给myObject值。
     *变量backupObject负责在preferrdObject中不包含有效值的情况下提供后备值.
     *如果preferrdObject的值不是null,那么将他的值赋给myObject
     *如果preferrdObject的值是null,则将backupObject的值赋给myObject
     */

     

 

posted @ 2016-09-01 16:51  chenccc  阅读(322)  评论(0编辑  收藏  举报