我希望在不使用try-catch的情况下访问undefined
的对象。
这是我的目标:
var obj = {
par1 : {
par2 : "Hello"
}
}
如果我想打印parametro2
,我可以这样做:
console.log(obj.par1.par2);
它有效。
<小时/> 但如果
par1
ID UNDEFINED
,如果我不使用试用,它会崩溃。
obj.par1 = undefined;
try{
console.log(obj.par1.par2)
} catch(e){
console.log("Error" + e);
}
有没有办法使用without
块处理此try-catch
?
答案 0 :(得分:1)
您可以执行类似
的操作if (obj.par1 && obj.par1.par2) {
console.log(obj.par1.par2);
}
答案 1 :(得分:1)
var nestedObject = {
n1: {
n2: {
n3: {
prop: "true"
}
}
}
};
function getNested(obj, key) {
var bits = key.split(".");
var o = obj;
var result;
var len = bits.length;
for (var i = 0; i < len; i++) {
var bit = bits[i];
console.log(o);
if (!o[bit]) {
return undefined;
}
o = o[bit];
}
return o;
}
alert(getNested(nestedObject, 'n1.n2.n3.prop'));
答案 2 :(得分:0)
如果你需要做很多事情,我建议你写一个帮助函数,可能是这样的:
function getKey(obj, keys) {
keys = keys.split('.');
var value = obj;
if (obj == null) {
return obj;
}
do {
value = value[keys.shift()];
} while (value != null && keys.length !== 0);
return value;
}
var obj = {
a: {
b: 'hello',
c: {
d: 'world'
}
},
e: 'foo'
};
getKey(obj, 'a.b'); // returns 'hello'
getKey(obj, 'a.c'); // returns { d: 'world' }
getKey(obj, 'a.c.d'); // returns 'world'
getKey(obj, 'e'); // returns 'foo'
getKey(obj, 'f'); // returns undefined
getKey(obj, 'z.x.y'); // returns undefined
getKey(undefined, 'f');// returns undefined
getKey(null, 'f'); // returns null
我希望这会有所帮助。我只用我提供的值来测试它,但它应该可以正常工作。