逻辑运算符通常用于布尔型(逻辑)值。这种情况下,它们返回一个布尔值。它经常和关系运算符一起配合使用。“&&” 、“!”和“ ||” 运算符会返回一个指定操作数的值,因此,这些运算符也用于非布尔值。这时,它们也就会返回一个非布尔型值。
逻辑与(&&)
逻辑与是由两个和号(&)表示,有两个操作位数,只有当左右两边都时成立,整个条件才成立.否则就是不成立。它属于一个短路操作,如果第一个条件就可决定结果,那就不用操作第二个条件了。它可以和多个运算符连用,返回第一个布尔值为false的表达式。可以取代if结构,也可以用于回调函数中。
<script> var i = 1; var n = 1; var result1 = (true && i++);//第一个条件成立,操作第二个条件 var resutl2 = (false && ++n);//第一个条件不成立,直接退出 console.log(i,n); //2 1 </script>
<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 var n = 1; var m = 1; var result = (true || ++n);//true为真,不执行后面的操作 var 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>