可选链操作符 ?.
允许读取位于连接对象链深处的属性的值,而不必验证链中的每个引用是否有效。?.
操作符的功能类似于 .
链式操作符,不同之处在于,在引用为 null
或者 undefined
的情况下不会引起错误,该表达式短路返回值是 undefined
当尝试访问可能不存在的对象属性时,可选链操作符将会使表达式更短、更简明。
const obj = {
a: 'foo',
b: {
c: 'bar'
}
}
console.log(obj.b?.c) // 输出 bar
console.log(obj.d?.c) // 输出 undefined
console.log(obj.func?.()) // 不报错,输出 undefined
以前可能会通过 obj && obj.a && obj.a.b
来获取一个深度嵌套的子属性,现在可以直接 obj?.a?.b
即可。
使用可选链可以使得表达式在函数不存在时返回 undefined
而不是直接抛异常。
可选链除了可以用在获取对象的属性,还可以用在数组的索引 arr?.[index]
,也可以用在函数的判断 func?.(args)
,当尝试调用一个可能不存在的方法时也可以使用可选链。
调用一个对象上可能不存在的方法时(版本原因或者当前用户的设备不支持该功能的场景下),使用可选链可以使得表达式在函数不存在时返回 undefined
而不是直接抛异常。
const result = someInterface.customFunc?.()
关于js中一些操作符,下面这篇博客可能会对你有所帮助: