对象(四)可选链 “?.“

如果可选链 ?. 前面的部分是 undefined 或者 null,它会停止运算并返回该部分

为了简明起见,在本文接下来的内容中,我们会说如果一个属性既不是 null 也不是 undefined,那么它就“存在”。

换句话说,例如 value?.prop:

如果 value 存在,则结果与 value.prop 相同,
否则(当 value 为 undefined/null 时)则返回 undefined

let user = {}; // user 没有 address 属性

alert( user?.address?.street ); // undefined(不报错)

如果 ?. 左边部分不存在,就会立即停止运算(“短路效应”)
其它变体:?.(),?.[]

我们可以使用 ?. 来安全地读取或删除,但不能写入
可选链 ?. 不能用在赋值语句的左侧。

let user = null;

user?.name = "John"; // Error,不起作用
// 因为它在计算的是 undefined = "John"

总结

可选链 ?. 语法有三种形式:

obj?.prop —— 如果 obj 存在则返回 obj.prop,否则返回 undefined。
obj?.[prop] —— 如果 obj 存在则返回 obj[prop],否则返回 undefined。
obj.method?.() —— 如果 obj.method 存在则调用 obj.method(),否则返回 undefined。
正如我们所看到的,这些语法形式用起来都很简单直接。?. 检查左边部分是否为 null/undefined,如果不是则继续运算。

?. 链使我们能够安全地访问嵌套属性。

但是,我们应该谨慎地使用 ?.,仅在当左边部分不存在也没问题的情况下使用为宜。以保证在代码中有编程上的错误出现时,也不会对我们隐藏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值