可选链操作符(
?.
)允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。?.
操作符的功能类似于.
链式操作符,不同之处在于,在引用为空(nullish ) (null
或者undefined
) 的情况下不会引起错误,该表达式短路返回值是undefined
。与函数调用一起使用时,如果给定的函数不存在,则返回undefined
。
es6可选链
?.
语法
obj?.prop
obj?.[expr]
arr?.[index]
func?.(args)
例子
如果我们多层的调用,直接调用当中间某层不存在时代码就会报错,如直接不判断调用
adventurer.from.cat.name
,当中间某一层如cat
不存在时就会报错
发现判断某个对象的函数存在才调用,旧方法就会比较繁琐
let adventurer = { from: { cat: { name: 'suisuiz' } } }
if(adventurer && adventurer.from && adventurer.from.cat && adventurer.from.cat.name){
let name = adventurer.from.cat.name
console.log(name)
}
es6
可选链 简化了很多
adventurer?.from?.cat?.name
if(adventurer?.from?.cat?.name) {
let name = adventurer?.from?.cat?.name
console.log(name)
}