逻辑运算符
a || b 和 a && b 的值得基本上不能是 true/false,
&& 运算符
&& 的意思是“和”
找 falsy 值
有一个假就是假
返回第一个 falsy 值
0 && 1 // 0
1 && 2 && 0 && 3 // 0
没有falsy值的话返回最后一个 truthy 值
1 && 2 && 4 && 3 // 3
fn && fn.call()
// 如果 fn 存在的话 就调用后面的函数,否则不调用。
&& 是前面的是 true 才会执行后面的。
|| 运算符
|| 的意思是“或”
找 truthy 值
有一个真就是真
返回第一个 truthy 值
0 || undefined || null || 1 || 2 || null // 1
var a = b || {}
// 的意思是
if(b){
    a = b;
}else{
    a = {};
}
|| 是前面的是 false 才会执行后面的。
! 运算符
! 运算符可以把 truthy 值变成 false,把 falsy 值变成 true。