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

时间:2017-01-20 16:22:41

标签: javascript

我不知道是否设置了a.b。我只想在a.b[0].c为真时才做某事。我可以这样做:

if (a.b && a.b[0] && a.b[0].c) {
    // ...
}

是否有检查嵌套存在的快捷方式?我可以简化这种情况吗?

2 个答案:

答案 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) {
    //...
  }