当使用点表示法访问嵌套对象时,我总是必须确保前一个对象存在,这会让人精疲力尽。
我基本上想避免像这样的 long if 链
if (a && a.b && a.b.c && a.b.c[0] ... ) { v = a.b.c[0]; }
我唯一能想到的另一件事是通过使用 try catch。
var v; try { v = a.b.c[0].d.e; } catch (e) {}
有更好的模式吗?
最佳答案
我认为您已经有了两个最漂亮的解决方案。
但请注意,对于诸如 obj.obj.string.length
之类的情况,如果 string === ""
,您的第一个解决方案将失败。由于空字符串是错误的,它会触发 &&
守卫。
但是说到字符串,您可以做类似的事情:
function getNestedProperty(obj, propChain) {
var props = propChain.slice(0), prop = props.shift();
if(typeof obj[prop] !== "undefined") {
if(props.length) {
return getNestedProperty(obj[prop], props);
} else {
return obj[prop];
}
}
}
var v = getNestedProperty(a, ["b", "c", 0, "d", "e"]);
是的...不太漂亮:P
我想说,在提出的解决方案中,try...catch
可能是最简单的方法
关于javascript - 避免长点符号链的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19795594/