首页 > 解决方案 > 在可选的 chaning 中访问数组值

问题描述

有人可以向我解释为什么第一个案例在这里没有抛出错误吗?

const target = {}

console.log("I won't throw: ", target.some?.property[0])

const value = target.some?.property
console.log("I will throw: ", value[0])

这是一个示例沙箱:https ://codesandbox.io/s/dark-currying-wb27l

标签: javascript

解决方案


括号表示法与点表示法具有相同的运算符优先级。他们做同样的事情。另一种看待它的方式是以下内容不会抛出:

const target = {}

console.log("I won't throw: ", target.some?.property.someProperty);

除了用[0]而不是someProperty

如果可选链接?.在某个点停止,则不会发生任何进一步的属性访问,并且整个表达式的计算结果为undefined

与...相比

const value = target.some?.property
console.log("I will throw: ", value[0])

在这里,value被赋值undefined,因为some不存在。然后,value[0]因为您无法访问undefined.

使用可选链接,如果链接成功,将在同一个表达式中进行进一步的属性访问。在同一个表达式中,如果链接失败,则不会发生进一步的属性访问。但这只是在考虑相同的表达式时。一旦包含可选链接的表达式被求值(在这里,它被分配给一个变量),可选链接提供的特殊逻辑就不再适用。


推荐阅读