js之运算符(逻辑运算符)

  逻辑运算符通常用于布尔型(逻辑)值。这种情况下,它们返回一个布尔值。它经常和关系运算符一起配合使用。“&&” 、“!”和“ ||” 运算符会返回一个指定操作数的值,因此,这些运算符也用于非布尔值。这时,它们也就会返回一个非布尔型值。

  逻辑与(&&)

    逻辑与是由两个和号(&)表示,有两个操作位数,只有当左右两边都时成立,整个条件才成立.否则就是不成立。它属于一个短路操作,如果第一个条件就可决定结果,那就不用操作第二个条件了。它可以和多个运算符连用,返回第一个布尔值为false的表达式。可以取代if结构,也可以用于回调函数中。

let i = 1,
 n = 1;
 result1 = (true && i++);//第一个条件成立,操作第二个条件
 resutl2 = (false && ++n);//第一个条件不成立,直接退出
 console.log(i,n);  //2 1 
    <script>
        //左侧为真,返回右侧的值,左侧为假,返回左侧的值 false,undefined,null,0,NaN,
'' 这些为假其余为真;可以多个连用,返回第一个布尔值为false的表达式的值
console.log('string' && ''); //'' console.log('string' && 1 + 2);//3 console.log('' && undefined);//'' console.log(false && null);//false console.log(0 && 'string');//0 console.log(NaN && false);//NaN console.log(true && 'string' && undefined && '' && 2); //undefined       </script>
    <script>
        if (a == b) {
           dosomething();
        }//等价于
       a == b && dosomething();

       function fn(a){
           if(a){
              a();
           }
       }//等价于
       function fn(a){
           a && a();
       }
    </script>

  逻辑或(||)

    有两个操作数,只有两个都条件都不成立时,结果才是不成立,否则都是成立的。它也是一种短路操作。也可多个连用,返回第一个布尔值为true的表达式的值,常用于为变量设置默认值。左侧为真,返回左侧的值,左侧为假,返回右侧的值。

<script>
    //左侧为真,返回左侧的值,左侧为假,返回右侧的值
    console.log("string" || ""); //string
    console.log("string" || "number"); //string
    console.log(undefined || 2); //2
    console.log(NaN || false); //false

    console.log("" || undefined || false || 3 || string); //3

    let n = 1,
        m = 1,
        result = true || ++n, //true为真,不执行后面的操作
        result = false || --m; //false为假,执行行后面操作
    console.log(n, m); //1 0

    //如果没有向参数a中传入值,则将参数设置为空对象
    function fn(a) {
      a = a || {};
    }
</script>         

  逻辑非(!)

    逻辑非是一个叹号,无论这个值是什么数据类型,使用这个操作符后都会返回一个布尔值。逻辑非操作符会先将它的操作数转换成一个布尔值然后再对其求反。如果同时用两个逻辑非的话那就相当于调用Boolean()方法,负负得正。一般用于控制循环。

    <script>
        console.log(!!NaN); //false
        console.log(!![]);  //true
        console.log(
            !! new Boolean(false)); //true
    </script>

 

 

原文地址:https://www.cnblogs.com/davina123/p/11804751.html