我不确定我是否了解可选链接的js实现背后的逻辑。
const a = {b:1}
1 > console.log(a?.c) => undefined
2 > console.log(a?.c?.d) => undefined
3 > console.log(a?.c.d) => Uncaught TypeError: Cannot read property 'd' of undefined
一切都有意义这么久。然后:
4 > console.log(a?.c?.d.e) => undefined
5 > console.log(a?.c?.d.e.f.g) => undefined
访问未定义的属性会引发错误(#3(,但在2个可选链接之后访问任意数量的不存在的嵌套属性不会再引发错误。
对问题的评论回答正确。这里有一个澄清:
console.log(a.c) // undefined
console.log(a.c.d) // Uncaught TypeError: Cannot read property 'd' of undefined
console.log(a.c.d.e) // Uncaught TypeError: Cannot read property 'd' of undefined
console.log(a.c?.d) // undefined
console.log(a.c?.d.e) // undefined
console.log(a.c?.d.e.f.g) // undefined
您可以看到,求值总是在c处停止,因为没有属性a.c。当它停止时,如果您使用了可选的链接运算符(?.(,它将返回未定义的值,如果没有,它将抛出一个错误。
请注意,这是最近的一个功能。对于nodejs,它出现在版本14中,该版本自2020/10/27起已准备好生产(LTS(。