javascript - 在可选的 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])
解决方案
括号表示法与点表示法具有相同的运算符优先级。他们做同样的事情。另一种看待它的方式是以下内容不会抛出:
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
.
使用可选链接,如果链接成功,将在同一个表达式中进行进一步的属性访问。在同一个表达式中,如果链接失败,则不会发生进一步的属性访问。但这只是在考虑相同的表达式时。一旦包含可选链接的表达式被求值(在这里,它被分配给一个变量),可选链接提供的特殊逻辑就不再适用。
推荐阅读
- version-control - 如何删除 Mercurial 中已推送的更改集?
- python - def 函数的问题
- ajax - 当在ajax中设置缓存为false时,它会在请求中添加一些值它是什么
- vba - 如何对vba中的数字列表求和?
- spring-mvc - 在spring MVC中使用带有方法Options和Head的请求时如何抛出错误
- php - php解密密码不起作用
- html - 从
- php - 我如何使用 foreach 在 php、pdo 中构建 2 个不同的列
- git - 我应该使用 git 的分支来保存我的代码的不同版本吗?
- php - 如果它们还没有标签,如何将 html i 标签添加到与数组元素匹配的子字符串中