一、?? 与 || 的区别
// ||
let a = ''
a = null
a = false
a = null
a = undefined
let c = a || 2 // c = 2
上面五种都可以造成a||2短路
// ??
let a = null
a = undefined
let b = 0
let c = a ?? 2 // c = 2
c = b ?? 3 // c = 0
只有a为null/undefined时,才会短路,否则返回左侧值
二、?.(可选链)
- 作用:可以获取对象深处的某个属性值,且该属性可以不存在,
- 与 . ** 的区别:?.** 更为安全,当取不到不存在的属性时,不用报错,会短路返回值,undefined
- 使用:
// 1.对象使用
let obj = { a: 'cc'}
obj?.c // undefined
obj?.a // 'cc'
obj?.['b'] // undefined 该方法属性为变量可以使用
// 2.数组使用
let arr = [1,2,3]
arr?.[1] // 1为下标
// 3.函数使用
let obj1 = {
fnc: val => {
console.log('i am', val)
}
}
obj1?.fna?.() // undefined
obj1?.fnc?.('cc') // i am cc
网友评论