如何避免“无法读取未定义的属性”错误?
在我的代码中,我处理了一个数组,其中包含一些条目,其中许多对象彼此嵌套,而有些则没有。它看起来像以下内容:
// 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存在的情况下执行,而不会引发错误?
回答:
:
- 如果您使用符合ECMAScript 2020或更高版本的JavaScript,请参阅可选链接。
TypeScript在[3.7版中增加了对可选链接的支持。
// use it like this
obj?.a?.lot?.of?.properties
:
一个快速的解决方法是将try / catch辅助函数与ES6 箭头函数一起使用:
function getSafe(fn, defaultVal) { try {
return fn();
} catch (e) {
return defaultVal;
}
}
// use it like this
getSafe(() => obj.a.lot.of.properties);
// or add an optional default value
getSafe(() => obj.a.lot.of.properties, 'nothing');
工作片段:
function getSafe(fn, defaultVal) { try {
return fn();
} catch (e) {
return defaultVal;
}
}
// use it like this
console.log(getSafe(() => obj.a.lot.of.properties));
// or add an optional default value
console.log(getSafe(() => obj.a.lot.of.properties, 'nothing'));
以上是 如何避免“无法读取未定义的属性”错误? 的全部内容, 来源链接: utcz.com/qa/430662.html