可选链?.
如果可选链?.前面是undefined或者null 则会停止运算并返回该部分
比如 value?.prop:
意思是如果value存在,则结果与value.prop结果相同
例子:安全访问user.address.street可以这样写
let use={} //use 并没有address属性
alert(use?.address?.street)//undefined 不报错
另外,即使对象不存在,也可以用?.
比如 let use=null
alert(use?.address)//undefined
alert(use?.address.street)//undefiend
优化一点的写法(不能滥用
比如 use对象一定存在,但是其属性address是可选的 ,需要写成这样
use.address?.street
而不是use?.address?.street
注意
?.前面的变量必须是已经声明的(比如let/const/var use 或者作为一个函数参数。可选链仅适用于已经声明的变量
其他变体 ?.() ?.[]
- ?.() 可以调用一个可能不存在得函数
- ?.[] 可以允许从一个可能不存在得对象上安全得读取属性
let user={
top:"五条悟",
power(){
alert("无下限术式,反转术式")
}
}
let userGuest={};
user.power?.()//无下限术式,反转术式
userGuest.power?.()//这个啥也没有
let user2=null;
let key="top";
user?.[key]//五条悟
user2?.[key] //undefiend
?.也可与delete 一起用
delete user?.name//如果user存在 那么删除user.name