逻辑运算符通常用于布尔型(逻辑)值。这种情况下,它们返回一个布尔值。它经常和关系运算符一起配合使用。“&&” 、“!”和“ ||” 运算符会返回一个指定操作数的值,因此,这些运算符也用于非布尔值。这时,它们也就会返回一个非布尔型值。
逻辑与(&&)
逻辑与是由两个和号(&)表示,有两个操作位数,只有当左右两边都时成立,整个条件才成立.否则就是不成立。它属于一个短路操作,如果第一个条件就可决定结果,那就不用操作第二个条件了。它可以和多个运算符连用,返回第一个布尔值为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>