js的可选练操作符 ?. 深层嵌套的问题
当获取深层对象的属性,并且属性都可能不存在的时候,请问是在最后用一个?.就可以呢,还是每个属性都要用?.
const obj = {
a: 1,
b: {
c: {
d: 2
}
}
}
第一种写法:obj.e.f.g?.i
第二种写法:obj?.e?.f?.g?.i
这两种写法哪一种正确呢?我控制台里试了好像第一种也可以,可选链操作符会给前面的每一层都判断undefined吗?只要前面有一层是undefined,只写一个?.放在最后,前面的好几层都能判断出来吗?
求教大佬
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
每层都要写。
a?.b
的本质就是a != null ? a.b : undefined
。第一种当然是错误的了,可选链语法是取值的语法糖,而不是搜索。
如果是搜索的话,确实应该允许跳过枝干往下匹配,就像
document.querySelector('span')
一样。但即便是搜索,也不应该在给出不可能的路径的时候还继续往下找,语法至少也得这样设计:
obj??.i
。