如何检查嵌套javascript对象中的任何键是否存在?

时间:2016-06-01 16:00:31

标签: javascript

我已经尝试了以下主题的最佳答案的建议,但我找不到太多运气: Checking if a key exists in a JavaScript object?

假设我正在处理一个大的嵌套javascript对象,例如调用以下API的响应: https://www.whoisxmlapi.com/order_paypal.php?domainName=google.com&outputFormat=json

如果你搜索一个存在的域包含WhoisRecord.administrativeContact.name的响应,我可以在我的javascript中吐出这个没问题。

但是,如果您搜索不存在的域,则该对象不会在对象中返回(足够公平)。

我现在要做的就是将WhoisRecord.administrativeContact.name的值赋给变量 - 如果对象中不存在此键,我很高兴此变量为空或未定义,但问题是当我尝试将WhoisRecord.administrativeContact.name分配给变量或检查它是否存在时,如果API没有返回此信息,我会得到旧的“无法读取未定义的属性”错误。

我理解100%为什么会这样,我只是不知道如何绕过它。我在顶部链接的线程建议使用“in”运算符,我已尝试过,但我无法让它认识到对象 包含此键,它只是总是返回假的。

正确的方向上的任何建议/推动都会受到赞赏。

2 个答案:

答案 0 :(得分:3)

使用逻辑AND:

var name = WhoisRecord && WhoisRecord.administrativeContact && WhoisRecord.administrativeContact.name;

答案 1 :(得分:1)

对于大多数"一次性"用例我同意@ CD的答案。

但有时候,合并你的动态'更有用。数据结构使用默认值来保证重要属性的存在。这可能允许您编写更简单,更清晰的代码:



// Your request result could be empty:
var data = {};

// Assign default values:
data = Object.assign({}, {
  WhoisRecord: {
    createdDate: 'Never',
    administrativeContact: {
      name: 'None'
    }
  }
}, data);

// Relevant properties are now guaranteed to exist:
console.log(data.WhoisRecord.administrativeContact.name);
console.log(data.WhoisRecord.createdDate);




参见例如jQuery.extend()更有趣的合并策略。