如何检查嵌套javascript对象中是否存在密钥?

如何检查嵌套javascript对象中是否存在密钥?,javascript,Javascript,我已经尝试了以下主题的顶部答案中的建议,但我没有找到多少运气: 假设我正在处理一个大型嵌套javascript对象,例如调用以下API的响应: 如果您搜索的域中包含WhoisRecord.administrativeContact.name,我可以在我的javascript中给出响应,这没有问题 但是,如果搜索的域不存在,则该键不会在对象中返回(足够公平) 我现在要做的就是将WhoisRecord.administrativeContact.name的值赋给一个变量-如果对象中不存在该键,我

我已经尝试了以下主题的顶部答案中的建议,但我没有找到多少运气:

假设我正在处理一个大型嵌套javascript对象,例如调用以下API的响应:

如果您搜索的域中包含WhoisRecord.administrativeContact.name,我可以在我的javascript中给出响应,这没有问题

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

我现在要做的就是将WhoisRecord.administrativeContact.name的值赋给一个变量-如果对象中不存在该键,我很高兴该变量为空或未定义,但问题是,当我尝试将WhoisRecord.administrativeContact.name分配给变量或检查其存在性时,如果API未返回此信息,则会出现“cannot read property of undefined”错误

我百分之百地理解为什么会发生这种事,我只是不知道如何去逃避它。我在顶部链接的线程建议使用“in”操作符,我已经尝试过了,但我无法让它识别对象是否包含此键,它总是返回false

任何关于正确方向的建议/建议都值得赞赏。

请使用逻辑和类似方法:

var name = WhoisRecord && WhoisRecord.administrativeContact && WhoisRecord.administrativeContact.name;
使用逻辑和类似的方法:

var name = WhoisRecord && WhoisRecord.administrativeContact && WhoisRecord.administrativeContact.name;
对于大多数“一次性”用例,我同意@CD的答案

但有时,将“动态”数据结构与默认值合并以保证重要属性的存在更为有用。这可能允许您编写更简单、更清晰的代码:

//您的请求结果可能为空:
变量数据={};
//指定默认值:
data=Object.assign({}{
世界卫生组织报告:{
createdDate:“从不”,
行政联系人:{
姓名:“无”
}
}
},数据);
//相关财产现在保证存在:
日志(data.WhoisRecord.administrativeContact.name);
log(data.WhoisRecord.createdDate)对于大多数“一次性”用例,我同意@CD的答案

但有时,将“动态”数据结构与默认值合并以保证重要属性的存在更为有用。这可能允许您编写更简单、更清晰的代码:

//您的请求结果可能为空:
变量数据={};
//指定默认值:
data=Object.assign({}{
世界卫生组织报告:{
createdDate:“从不”,
行政联系人:{
姓名:“无”
}
}
},数据);
//相关财产现在保证存在:
日志(data.WhoisRecord.administrativeContact.name);

log(data.WhoisRecord.createdDate)
var name=WhoisRecord&&WhoisRecord.administrativeContact&&WhoisRecord.administrativeContact.name
这么简单的解决方案-非常感谢。我想得太多了。在你问新问题之前,请使用搜索。另外,这与JSON无关。@FelixKling IMHO不是一个重复的问题,因为另一个问题要求“一个比执行
a&&a.b&&a.b.c
”更好的方法,这对OP来说是毫无用处的。这里@CD接受的答案就是OP想要的。@Leu\m:我不明白为什么它没有用处。它显示了简单的方式(在问题中)和答案中的其他版本。
var name=WhoisRecord&&WhoisRecord.administrativeContact&&WhoisRecord.administrativeContact.name
如此简单的解决方案-非常感谢。我想得太多了。在你问新问题之前,请使用搜索。另外,这与JSON无关。@FelixKling IMHO不是一个重复的问题,因为另一个问题要求“一个比执行
a&&a.b&&a.b.c
”更好的方法,这对OP来说是毫无用处的。这里@CD接受的答案就是OP想要的。@Leu\m:我不明白为什么它没有用处。它显示了简单的方式(在问题中)和答案中的其他版本。非常有用的了解,感谢添加此。非常有用的了解,感谢添加此。