我已经尝试了以下主题的最佳答案的建议,但我找不到太多运气: 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”运算符,我已尝试过,但我无法让它认识到对象 包含此键,它只是总是返回假的。
正确的方向上的任何建议/推动都会受到赞赏。
答案 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()更有趣的合并策略。