JavaScript-javascript对象级联取值如何避免undefined错误

JavaScript-javascript对象级联取值如何避免undefined错误

泛泛之交 发布于 2017-10-04 字数 154 浏览 1046 回复 3

在做项目的时候,后台传过来一个json对象。比如他的结构是

data = {
a:{
b:{
c:'c',
d:'d'
}
}
}

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

想挽留 2017-10-26 3 楼

我倒是觉得try-catch也是个不错的办法

或者这样写,如果不确定b是否存在:
var p1 = data.a.b && data.a.b.d;
使用p1时再判断一下:
if(typeof(p1)!='undefined') ...;
或写: typeof(p1)=='undefined' ? ... : ...;

如果是p1不存在就用默认值代替的情况,可以直接写成:
alert(p1 || '默认值');
(如果你想取的值在js中转义为布尔值后是false的话,比如数字0,比如结果就是false,不能用这种方法。)

如果a的存在都不能确定,可以加长一些:
var p1 = data.a && data.a.b && data.a.b.d;

这样写好处是足够省代码,一句完事绝不啰嗦。
不过这样写代码更加晦涩,自己用惯了的话,是可以一眼就看明白的,但别人理解起来可能就不大好办了。

泛泛之交 2017-10-07 2 楼

//我的习惯是这样
functon getValue(o,p,def){
var p = p.split('.',p);
var def = def || null;
var p1;
while(p1 = p.shift()) {
if(!o[p1]){
return def;
}
o = o[p1];
}
return o || def;
}

getValue(date,'a.b.d','d');

晚风撩人 2017-10-05 1 楼

在使用之前先判断一下:

 var d = typeof data.a.b.d !== "undefined" ? data.a.b.d : false ;
//or
if(typeof data.a.b.d !== "undefined"){
//do something
}