为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

侃侃无极 2019-08-08 16:04:04
如何避免'无法读取未定义的属性'错误?在我的代码中,我处理的数组中有一些条目,其中有许多对象彼此嵌套,而有些则没有。它看起来像下面这样:// where this array is hundreds of entries long, with a mix// of the two examples givenvar 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,如果它存在,但没有抛出错误?
查看完整描述

3 回答

?
森栏

TA贡献1810条经验 获得超5个赞

你正在做的事情引发了一个例外(理所当然)。

你总能这样做

try{
   window.a.b.c}catch(e){
   console.log("YO",e)}

但我不会想到你的用例。

你为什么要访问数据,嵌套你不熟悉的6个级别?什么用例证明了这一点?

通常,您希望实际验证您正在处理的对象类型。

另外,在旁注中你不应该使用这样的语句,if(a.b)因为如果ab为0或者即使它是“0”它将返回false。而是检查是否a.b !== undefined


查看完整回答
反对 回复 2019-08-08
?
四季花海

TA贡献1811条经验 获得超5个赞

如果我正确理解您的问题,您需要最安全的方法来确定对象是否包含属性。

最简单的方法是使用“in”语句。

window.a = "aString";//window should have 'a' property//lets test if it existsif ("a" in window){
    //true
 }if ("b" in window){
     //false
 }

当然,您可以根据需要将其嵌套

if ("a" in window.b.c) { }

不确定这是否有帮助。


查看完整回答
反对 回复 2019-08-08
  • 3 回答
  • 0 关注
  • 3245 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信