gpt4 book ai didi

javascript - 如何避免 'cannot read property of undefined' 错误?

转载 作者:IT王子 更新时间:2023-10-29 02:45:14 25 4
gpt4 key购买 nike

在我的代码中,我处理了一个数组,该数组包含一些条目,其中许多对象彼此嵌套,而有些则没有。它看起来像下面这样:

// 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,请参阅 optional chaining .
  • TypeScript 在版本 3.7 中添加了对可选链的支持.
// use it like this
obj?.a?.lot?.of?.properties

ECMASCript 2020之前的JavaScript或3.7版本之前的TypeScript解决方案:

一个快速的解决方法是在 ES6 中使用 try/catch 辅助函数 arrow function :

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'));

关于javascript - 如何避免 'cannot read property of undefined' 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14782232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com