a || ba && 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