【问题标题】:How to deep check for "null" or "undefined" with JS?如何使用 JS 深入检查“null”或“undefined”?
【发布时间】:2014-04-28 08:00:29
【问题描述】:

在 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
}

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

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

【问题讨论】:

标签: javascript node.js null undefined


【解决方案1】:

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

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

那么如果obj是上面贴的对象,可以调用

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

它会产生 true 或 false 而不是抛出错误。

见https://www.npmjs.org/package/dotty

【讨论】:

    【解决方案2】:

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

    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'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-14
      • 1970-01-01
      • 1970-01-01
      • 2016-08-25
      • 1970-01-01
      • 2019-05-09
      • 2011-09-19
      • 2020-07-19
      相关资源
      最近更新 更多