3

我不确定我是否了解可选链接的 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

访问 undefined 的属性会引发错误(#3),但在 2 个可选链接之后访问任意数量的不存在的嵌套属性不会再引发错误。

4

1 回答 1

0

对问题的评论正确回答。这里有一个澄清:

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 处停止,因为没有属性 ac 当它停止时,如果你使用了可选的链式操作符 (?.),它返回 undefined,如果没有,它会抛出一个错误。

请注意,这是最近的功能。对于 nodejs,它出现在版本 14 中,截至 2020 年 10 月 27 日,该版本已准备好生产 (LTS)。

于 2020-08-21T17:48:57.243 回答