基础知识之逻辑与(&&)
对于两个操作数都是布尔值的情况,在此不多做说明,以下主要是举例一些特定情况。
第一个操作数是对象,返回第二个操作数
console.log([] && false); //fasle
console.log([] && ''); //''
console.log({} && true); //true
第二个操作数是对象,只有第一个操作数【求值为true】才会返回该对象
console.log('' && []); //''
console.log('hello' && []); //[]
console.log(true && []); //[]
console.log(false && []); //false
console.log(0 && []); //0
console.log(NaN && []); //NaN
如果两个操作数都是对象,则返回第二个操作数
console.log([] && {}); //{}
console.log({} && []); //[]
如果有一个操作数是null/NaN/undefined,则返回null/NaN/undefined,
理解:短路操作的特性
如果有一个操作数是null,则返回null,
console.log('a' && null); //null
console.log('' && null); //''
console.log(true && null); //null
console.log(false && null); //false
console.log(1 && null); //null
console.log(0 && null); //0
console.log(NaN && null); //NaN
console.log([] && null); //null
console.log(null && true); //null
console.log(null && false); //null
如果有一个操作数是NaN,则返回NaN,
console.log('a' && NaN); //NaN
console.log('' && NaN); //''
console.log(true && NaN); //NaN
console.log(false && NaN); //false
console.log(1 && NaN); //NaN
console.log(0 && NaN); //0
console.log(NaN && NaN); //NaN
console.log([] && NaN); //NaN
console.log(NaN && true); //NaN
console.log(NaN && false); //NaN
如果有一个操作数是undefined,则返回undefined,
console.log('a' && undefined); //undefined
console.log('' && undefined); //''
console.log(true && undefined); //undefined
console.log(false && undefined); //false
console.log(1 && undefined); //undefined
console.log(0 && undefined); //0
console.log(undefined && undefined); //undefined
console.log([] && undefined); //undefined
console.log(undefined && true); //undefined
console.log(undefined && false); //undefined
&&操作是一个短路操作,如果第一个操作数决定了结果,永远不会对第二个操作数求值
console.log('' && true); //''
console.log(0 && true); //0
console.log(true && ''); //''