对于
&&、||、??操作符,老是犯迷糊,经常整头晕,今天就来好好研究一下这几个东西
1 逻辑与&&
操作数可以是任意数据类型,7种基本数据类型和1种复杂数据类型,都可以作为他的操作数
原则👉**
前真取后,前假取前**🐳前一个操作数为
真(可能是非布尔型转为布尔型的结果),那么直接取后一个操作数作为返回结果🐳前一个操作数为
假(可能是非布尔型转为布尔型的结果),那么直接短路,取该操作数作为返回结果
🌰举几个栗子
let b1 = { name: 'jack' } && 1 && null //null
let b2 = undefined && 1 //undefined
let b3 = NaN && true //NaN
let b4 = 1 && 2 && 3 && '' //''
let b5 = true && 'hello' && {} //{}
let b6 = true && 1024 && 1 //1
👍总结👉 如果操作数如果全为
true,返回最后一个操作数,否则返回第一个为false的操作数
2 逻辑或||
操作数可以是任意数据类型,7种基本数据类型和1种复杂数据类型,都可以作为他的操作数
原则👉**
前真取前,前假取后**🐳前一个操作数为
真(可能是非布尔型转为布尔型的结果),那么直接短路,取该操作数作为返回结果🐳前一个操作数为
假(可能是非布尔型转为布尔型的结果),那么后一个操作数作为返回结果
🌰举几个栗子
let b1 = { name: 'jack' } || 1 || null //{ name: 'jack' }
let b2 = undefined || 1 //1
let b3 = NaN || true //true
let b4 = 1 || 2 || 3 || '' //1
let b5 = true || 'hello' || {} //true
console.log(null || NaN || 0 || '' || undefined) //undefined
👍总结👉 如果操作数如果全为
false,返回最后一个操作数,否则返回第一个为true的操作数 灵活运用之判断多个数据是否相等
function checkEqual(x, ...rest) {
return Object.is(x, rest[0]) && (rest.length < 2 || checkEqual(...rest))
}
3 双问号??
注意与
||的区别,??只用于判断undefined和null
🌰举几个栗子
let b1 = undefined || 1 //1
let b2 = undefined ?? 1 //1
let b3 = undefined || 2 //2
let b4 = undefined ?? 2 //2
let b5 = '' || 3 //3
let b6 = '' ?? 3 //''
👍总结👉
??操作符只对undefined和null起作用