为了避免报错,在访问adventurer.dog.name之前,要保证 adventurer 的值既不是 null,也不是 undefined。如果只是直接访问 adventurer.dog.name,而不对 adventurer 进行校验,则有可能抛出错误。
通过使用 ?. 操作符取代 . 操作符,JavaScript 会在尝试访问 obj.first.second 之前,先隐式地检查并确定 obj.first 既不是 null 也不是 undefined。如果obj.first 是 null 或者 undefined,表达式将会短路计算直接返回 undefined。
可选链与函数调用
当尝试调用一个可能不存在的方法时也可以使用可选链。这将是很有帮助的,比如,当使用一个API的方法可能不可用时,要么因为实现的版本问题要么因为当前用户的设备不支持该功能。
函数调用时如果被调用的方法不存在,使用可选链可以使表达式自动返回undefined而不是抛出一个异常。
语法
obj?.prop
obj?.[expr]
arr?.[index]
func?.(args)
浏览器兼容性
详情可以参考MDN