我不知道是否设置了a.b
。我只想在a.b[0].c
为真时才做某事。我可以这样做:
if (a.b && a.b[0] && a.b[0].c) {
// ...
}
是否有检查嵌套存在的快捷方式?我可以简化这种情况吗?
答案 0 :(得分:3)
我以前用高尔夫编码,我们使用的其中一个技巧如下。
(myArray || [])[0] || 0
首先,评估myArray || []
,如果myArray存在,则返回它,如果它没有,则返回一个空数组。让我们说myArray没有定义。接下来,[][0] || 0
表达式被评估为ans,因为[][0]
未定义,返回0.
在您的情况下,可以使用以下方式:
((a.b || [])[0] || {}).c || {}
如果某些内容未定义,则返回一个空对象。
我不是说你应该使用它(事实上,你不应该),我只想告诉你,有一个较小的解决方案。
更新
如果tc39通过,那么您可以使用可选链接获得更好的解决方案:
a.b?[0]?.c
答案 1 :(得分:0)
你可以做(但它的详细)
var exists;
try {
exists = a.b[0].c;
} catch(e) {}
if (exists) {
//...
}