一、逻辑运算符
逻辑运算符与(&&)和或(||)对于大家而言,并不陌生,但也正因如此,会有人认为它们在JavaScript中的表现也和在其他语言中一样。
这里面有些不太为人知的细微差别。在JavaScript中它所返回的不是一个布尔值,它所返回的是两个操作数中的一个,即选择两个操作数中的一个,然后返回它的值,而这个值并不一定是布尔类型。
例如:
let a =42,b=null,c="abc"
a || b // 42
a && b // null
b || c // "abc"
b && c // null
// 换一个角度理解的话,大致相当于
a || b
a ? a:b
a && b
a ? b:a
二、布尔值的隐式强制类型转换
在||和&&中,既然返回的不是true或者false,那么a && (b || c)这样的表达式在if和for中仍可正常使用的问题在于,这些表达式最后还会执行布尔值的隐式强制类型转换。
例如:
let d =42,e=null,f="abc"
if(d && (e || f)){
console.log("yep")
}
这里的结果相当于
e || f
e ? e : f
d && f
d ? f : d
"abc"
再由if将“abc”强制转换为布尔值,所以最后结果为true。