如何深入检查" null"或"未定义"用JS?

时间:2014-04-28 08:00:29

标签: javascript node.js null undefined

在Node.JS项目中,我们说我有来自API或任何其他具有

结构的对象的响应
{
  data: {
    info: {
      user: {
        name: "Hercules",
        password: "Iamthegreatest!"
        email: "hercules@olymp.gr"
      }
    }       
  }
}

访问对象的成员非常简单。但是,在访问任何值之前检查存在会得到PITA。

我可以假设数据始终存在。信息,用户,姓名,密码和电子邮件可能存在或不存在。可以存在没有用户的有效信息对象,并且可以存在没有电子邮件地址的有效用户。

这导致像

这样的代码
if (data && data.info && data.info.user && data.info.user.email) {
  var email = data.info.user.email;
}

仅检查

if (data.info.user.email)
  // do something
}

如果任何对象不存在,则会引发错误。

是否有更短的方法来深入检查这样的结构的存在?

2 个答案:

答案 0 :(得分:2)

从项目目录中的控制台npm install dotty

然后在代码的顶部,使用以下内容导入dotty:var dotty = require('dotty')

如果obj是上面发布的对象,则可以调用

dotty.exists(obj, "data.info.user.email")

它会产生truefalse,而不是抛出错误。

请参阅https://www.npmjs.org/package/dotty

答案 1 :(得分:0)

另一种替代方法是Lodash的Lodash方法,因为许多开发人员已经在使用get()

import _ from 'lodash';

let data = {
  info: {
    user: {
      email: 'user.email@example.com'
    }
  }
};

_.get(data, 'info.user.email');
// => 'user.email@example.com'


get()的好处是,在解析的值为undefined的情况下,它支持默认值:

_.get(data, 'info.user.emailAddress', 'default.email@example.com');
// => 'default.email@example.com'