是否有检查嵌套属性存在的快捷方式



我不知道是否设置了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

最新更新