如何避免'无法读取未定义的属性'错误?在我的代码中,我处理的数组中有一些条目,其中有许多对象彼此嵌套,而有些则没有。它看起来像下面这样:// 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
四季花海
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) { }
不确定这是否有帮助。
添加回答
举报
0/150
提交
取消