1、&&/||返回能够被转换为布尔值的值
&&操作符不一定返回布尔值true/false,但总是返回一个能转换为布尔值的值,这决定于用于比较的是什么值。
非0数字转为true,数字0转为false,null、undefined转为false,对象、数组、函数表达式、非空字符串转为true,空字符转为false,函数执行时返回计算结果。
注意即使是空数组或不含任何属性的对象都返回true。
含有NaN类型的比较返回NaN。
&&的操作顺序是从左至右,当左边的计算值为false或转换后的值为false时,右边的值计算值将不再比较。
function t(){
return 0 && -1;
}
console.log(t());0
上式中,0 && –1逻辑与比较,因为0转换为布尔值为false,因此,-1不再计算比较,只计算左边的值--0。
console.log(function(){} && -1);
-1
特殊情况:
console.log(NaN && -1);
NaN
console.log([] && -1);
-1
如果逻辑与比较左边的运算结果为true,则返回最后一位比较结果。
console.log(true && {} && 0);
0
最后的结果为0,因为0转换为布尔值为false。因此在判断中
if(true && {} && 0)
alert(‘ok’);
else
alert(‘fail’);
中,将弹出fail。
2、逻辑运算符在实际中的运用
同行执行多个计算:
fun1() && fun2();
如果fun1运算结果为true,则继续执行fun2,它不计较fun2最后返回的是什么结果。
var aa = aa || 1;
console.log(aa);1
这利用了||会返回结果的特性。如果aa已定义,则返回aa定义的值,如果没有,则返回数字1。
var a = 1 && [];
console.log(a);[]
如果一个函数不返回结果,则默认返回undefined。
function Y(){
}
console.log(Y());undefined