【发布时间】:2019-12-28 15:39:28
【问题描述】:
在我的代码中,我处理了一个数组,其中包含一些条目,其中许多对象相互嵌套,而有些则没有。它看起来像下面这样:
// where this array is hundreds of entries long, with a mix
// of the two examples given
var test = [{'a':{'b':{'c':"foo"}}}, {'a': "bar"}];
这给我带来了问题,因为我有时需要遍历数组,并且不一致会引发如下错误:
for (i=0; i<test.length; i++) {
// ok on i==0, but 'cannot read property of undefined' on i==1
console.log(a.b.c);
}
我知道我可以说if(a.b){ console.log(a.b.c)},但在最多有 5 或 6 个对象相互嵌套的情况下,这是非常乏味的。有没有其他(更简单)的方法可以让它只在 console.log 存在的情况下执行,但不会引发错误?
【问题讨论】:
-
该错误可能是常规的 Javascript 异常,因此请尝试
try..catch语句。也就是说,包含大量异构元素的数组对我来说似乎是一个设计问题。 -
如果你的结构在项目之间不一致,那么检查存在有什么问题?真的,我会使用
if ("b" in a && "c" in a.b)。这可能是“乏味的”,但这就是你得到的不一致......正常逻辑。 -
为什么要访问不存在的属性,为什么不知道对象的样子?
-
我可以理解为什么有人不希望错误导致一切崩溃。您不能总是依赖对象的属性来存在或不存在。如果您有一些东西可以处理对象格式错误的事件,那么您的代码将更加高效且不那么脆弱。
-
你会惊讶于现实生活中有多少对象/数组格式不正确
标签: javascript