?.
,中文名为可选链比如我们需要一个变量,是数组且有长度,才做某些操作
const list = null
// do something
if (list && list.length) {
// do something
}
// 使用可选链
const list = null
// do something
if (list?.length) {
// do something
}
比如有一个对象,我要取一个可能不存在的值,甚至我们都不确定 obj 是否存在
const obj = {
cat: {
name: '哈哈'
}
}
const dog = obj && obj.dog && obj.dog.name // undefined
// 可选链
const obj = {
cat: {
name: '哈哈'
}
}
const dog = obj?.dog?.name // undefined
比如有一个数组,我不确定它存不存在,存在的话就取索引为 1 的值
const arr = null
// do something
const item = arr && arr[1]
// 可选链
const arr = null
// do something
const item = arr?.[1]
比如有一个函数,我们不确定它存不存在,存在的话就执行它
const fn = null
// do something
const res = fn && fn()
// 可选链
const fn = null
// do something
const res = fn?.()
??
,中文名为空位合并运算符 请看以下代码,咱们使用 ||
运算符,只要左边是假值,就会返回右边的数据const a = 0 || 'Lance' // Lance
const b = '' || 'Lance' // Lance
const c = false || 'Lance' // Lance
const d = undefined || 'Lance' // Lance
const e = null || '林三心' // Lance
而 ??
和 ||
最大的区别是,在 ??
这,只有 undefined
和 null
才算假值
const a = 0 ?? 'Lance' // 0
const b = '' ?? 'Lance' // ''
const c = false ?? 'Lance' // false
const d = undefined ?? 'Lance' // Lance
const e = null ?? 'Lance' // Lance
或等于(||=) a ||= b 等同于 a || (a = b);
且等于(&&=) a &&= b 等同于 a && (a = b);