js的可选练操作符 ?. 深层嵌套的问题

发布于 2022-09-13 00:33:02 字数 306 浏览 10 评论 0

当获取深层对象的属性,并且属性都可能不存在的时候,请问是在最后用一个?.就可以呢,还是每个属性都要用?.

const obj = {
  a: 1,
  b: {
    c: {
      d: 2
    }
  }
}
第一种写法:obj.e.f.g?.i
第二种写法:obj?.e?.f?.g?.i
这两种写法哪一种正确呢?我控制台里试了好像第一种也可以,可选链操作符会给前面的每一层都判断undefined吗?只要前面有一层是undefined,只写一个?.放在最后,前面的好几层都能判断出来吗?

求教大佬

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

风吹过旳痕迹 2022-09-20 00:33:02

每层都要写。

a?.b 的本质就是 a != null ? a.b : undefined

煮酒 2022-09-20 00:33:02

第一种当然是错误的了,可选链语法是取值的语法糖,而不是搜索。
如果是搜索的话,确实应该允许跳过枝干往下匹配,就像 document.querySelector('span')一样。
但即便是搜索,也不应该在给出不可能的路径的时候还继续往下找,语法至少也得这样设计:obj??.i

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文