Javascript 在不使用try-catch块的情况下访问未定义的对象
我想访问Javascript 在不使用try-catch块的情况下访问未定义的对象,javascript,try-catch,Javascript,Try Catch,我想访问未定义的对象,而不使用try-catch 这是我的目标: var obj = { par1 : { par2 : "Hello" } } 如果要打印参数2我可以执行以下操作: console.log(obj.par1.par2); 它是有效的 但是如果par1idUNDEFINED如果我不使用try-catch,它就会崩溃 有没有一种方法可以在不使用try catch块的情况下处理此 if (obj.par1 && obj.par1.par2) {
未定义的对象,而不使用try-catch
这是我的目标:
var obj = {
par1 : {
par2 : "Hello"
}
}
如果要打印参数2
我可以执行以下操作:
console.log(obj.par1.par2);
它是有效的
但是如果par1
idUNDEFINED
如果我不使用try-catch,它就会崩溃
有没有一种方法可以在不使用try catch
块的情况下处理此
if (obj.par1 && obj.par1.par2) {
console.log(obj.par1.par2);
}
var nestedObject={
n1:{
n2:{
n3:{
道具:“真的”
}
}
}
};
函数getNested(对象,键){
变量位=键拆分(“.”);
var o=obj;
var结果;
var len=位长度;
对于(变量i=0;i
如果您需要经常这样做,我建议您编写一个助手函数,可以是这样的:
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
我希望这有帮助。我只使用我提供的值进行了测试,但它应该可以正常工作。当par1
是未定义的时,您希望得到什么值?我不希望它在不使用try-catch的情况下崩溃,然后必须对它进行评估,对吗?你希望这个“东西”是什么?好吧,但我需要用最好的方式去做,因为我可能会有更深层次的目标。我的第一反应是问你为什么要这样做。这似乎是一个您不应该遇到的问题,可以通过重新分解代码库的其他部分来解决。无论如何,我会尽力回答你的问题。接下来想到的是做这样的事情。这样可以任意嵌套对象。不过,我还是不建议这样做。你真的不应该做这样的事情。“如果不使用提供的两种技术,我如何做这件事?”你为什么任意拒绝它们?有趣的,通用的方法。不过,似乎未使用变量结果。
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'));
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