&&
&&会从左到右执行表达式,直到某个表达式的运行结果返回false,或者可以转化为false,则返回该表达式的运行结果作为整个&&表达式的运行结果;如果所有表达式的直接结果均为true,则返回最后一个表达式的执行结果作为整个&&表达式的结果
console.log('a' && 'b') // b
console.log(1 && 2 && 3) // 3
console.log('aa' && (a = false) && 'bb') // false
console.log('aa' && (a = 0) && 'bb') // 0
总结下,下面7种值转化为布尔值时为false,其他转化都为true
- undefined(未定义、找不到值、函数无return时的返回值)
- null(代表空值)
- false(布尔值的false,字符串"false"布尔值为true)
- 0(数字0,字符串"0"布尔值为true)
- NaN(无法计算结果时出现,表示"非数值";但是typeof NaN===“number”,例:Number(‘aa’))
- “”(双引号)或’’(单引号) (空字符串,中间有空格时也是true)
- 右边的值返回false的赋值表达式(例:var a= false 或者 var a = 0)
||
||会从左到右执行表达式,直到某个表达式的运行结果返回true,或者可以转化为true,则返回该表达式的运行结果作为整个||表达式的运行结果;如果所有表达式的直接结果均为false,则返回最后一个表达式的执行结果作为整个||表达式的结果
console.log(2 || 0 || 3) // 2
console.log(0 || 0 || 2 || 0 || 3) // 2
console.log(0 || (a=false) || undefined) // undefined