javascript中逻辑运算符总结

1.逻辑与   &&

 1)  返回值为数值:
true && true = (第二个值)
true && false = (第二个值)
false && true = (第一个值)
false && false = (第一个值)
        console.log(3 && 0);      //0
        console.log(3 && 4);    //4
        console.log(0 && 4);    //0
        console.log(0 && "");    //0
2)返回值为布尔值:
 var a=2,b=5;
 console.log(2>0 && 5<10)    //true
 console.log(a>0 && b<10)    //true
console.log(a>0 && “5”) //5

总结:

1)若逻辑与的两边是判断,则返回boolean值

2)若逻辑与的两边是数值,则返回对应number值

3)若逻辑与一边是判断,一边是数值,则返回数值

2.逻辑或    ||

true || true = (第一个值)
true || false = (第一个值)
false || true = (第二个值)
false || false = (第二个值)
       代码验证过程如上面的逻辑与。
 
应用:在实际的项目中,我们经常用逻辑或来给变量赋值。例如:
            var obj;
            obj= obj || {};


            if(!obj){
                obj={};    
            }

这两种方法的功能是一样的,但是第一种是不是看起来要简单,并且高大上一些呢。在来个例子:

        bn.onclick=function(e){
            e=e || window.event;

         }
         bn.onclick=function(e){
            if(!e){
                e=window.event;
            }
         }

可以很明显的感觉到第一种方法要比较好。

我们常常用这种方法来写单例模式,例如:

      class Box{
            static _instance;
            static getInstance(){
                return Box._instance || (Box._instance=new Box());
            }
        }

3.逻辑非    !

 !  取逻辑反,先隐式转换布尔值,然后取反. 
 console.log(![]==false);
 console.log(![]===false);         结果:true   true  

解释:对象不能转换为字符串,console.log(String(obj(a:1,b:2)))--->[object,Object],数组可以转换为字符串,console.log(String([1,2,3]))--->1,2,3,

空数组[]--->"",  ""==false==0   所以[]==false;   如果是这样的话,那么上面的运行的结果就是错的。到底是怎么回事呢?

“ !  取逻辑反,先隐式转换布尔值,然后取反”,这句话很重要,在前面我总结的,只有空字符(""),0,false,undefined,null,NAN是false,其余的都是true,所以[]先隐式转换为true,然后![]===false

 常用逻辑非来写开关,例如:

     var bool=false;
        var bn=document.getElementById("bn");
        bn.onclick=function(){
            bool=!bool;//取反运算
            bn.innerHTML=bool ? "开" : "关";
        }
原文地址:https://www.cnblogs.com/94-Lucky/p/13155357.html