如何避免“无法读取未定义的属性”错误?

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

// 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

回到顶部