此问题已在此处有答案:
Test for existence of nested JavaScript object key(64答案)
7年前关闭。
我不得不一次又一次地处理代码,比如考虑下面的假设示例:
if (node.data.creatures.humans.women.number === Infinity) {
// do-something
}
问题是,如果节点未定义,则此条件将中断。类似地,如果node.data未定义,node.data.creatures未定义,等等,它将中断。
所以我最终使用了以下类型的长条件:
if (node && node.data && node.data.creatures && node.data.creatures.humans && node.data.creatures.women && node.data.creatures.humans.women.number === Infinity) {
// do-something
}
现在,假设我必须在代码的许多其他部分中使用JSON对象的一部分。代码突然开始看起来非常丑陋。
有没有其他方法可以避免像“Cannot call property of undefined”这样的错误,因为我提到的第一个条件(这样代码看起来也更好)?
你如何处理这种情况?
3条答案
按热度按时间irtuqstp1#
下面是我正在使用的,它可能不是“最优化”的方式,但是,这对我有用:
该方法接受一个对象和一个字符串,其中包含要测试的属性的点表示法:
zzzyeukh2#
尝试访问
undefined
上的属性是一个 catchableTypeError
,所以你可以使用try..catch
:pftdvrlh3#
您可以使用
try
-catch
Package 可能有害的部分:另一种可能更优雅的方法是定义预期的对象结构,然后使用例如jQuery.extend()将其与实际数据合并。
这将确保结构如您所期望的那样,并且不存在的字段具有一些默认值。
然后合并它: