我不知道是否设置了a.b
。只有当a.b[0].c
为真时,我才想做一些事情。我可以这样做:
if (a.b && a.b[0] && a.b[0].c) {
// ...
}
是否有检查嵌套存在的快捷方式?我可以简化这种条件吗?
我曾经对高尔夫进行过编码,我们使用的技巧之一如下。
(myArray || [])[0] || 0
首先,对myArray || []
进行求值,如果myArray存在,则返回它;如果不存在,则会返回一个空数组。假设myArray没有定义。接下来,对[][0] || 0
表达式进行求值,因为[][0]
未定义,因此返回0。
在您的情况下,它可以通过以下方式使用:
((a.b || [])[0] || {}).c || {}
如果某个对象未定义,则返回一个空对象。
我并不是说你应该使用这个(事实上,你不应该),我只是想向你展示,有一个更小的解决方案。
更新:
如果tc39通过了,那么使用可选链接将有一个更好的解决方案:
a.b?[0]?.c