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

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

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

求教大佬

阅读 1.5k
2 个回答

每层都要写。

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题