温故而知新系列(三)通俗易懂&&-||-??操作符

315 阅读2分钟

对于&&||??操作符,老是犯迷糊,经常整头晕,今天就来好好研究一下这几个东西

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 双问号??

注意与||的区别,??只用于判断undefinednull

🌰举几个栗子

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 //''

👍总结👉 ??操作符只对undefinednull起作用