从对象中获取更深层次的属性是出了名的烦人。如果父级不存在,则会出现错误。因此,当父母不存在时,您需要停止访问该物业。
这样做的无能为力的方法是:
if (parent.value && parent.value.subvalue && parent.value.subvalue.targetvalue)
var myVal = parent.value.subvalue.targetvalue;
else
var myVal = null;
当您需要经常获取某个属性时,这是行不通的,您需要一个快捷功能。首先我做了这样的事情:
function getProp(path) {
try {
return eval(path);
}
catch (e) {
return null;
}
};
// getProp('parent.value.subvalue.targetvalue');
但这至少有两个原因:对象必须在范围内,并且没有人喜欢使用eval()
.
所以也许最好将对象应用于函数:
function getProp(path, parent) {
path = path.split('.');
var val = parent;
for (var k = 0; k < path.length; k++) {
var key = path[k];
try {
val = val[key];
}
catch (e) {
return null;
}
}
return val;
};
// getProp('value.subvalue.targetvalue', parent);
但不知何故,它仍然感觉不对。
你怎么做到这一点?什么是最佳实践?
设置其父母可能存在也可能不存在的对象深度属性更加烦人。
parent = parent || {};
parent.value = parent.value || {};
parent.value.subvalue = parent.value.subvalue || {};
parent.value.subvalue.target = "YAY SOME VALUE!"
你会如何很好地解决这个问题?
是否有用于此的 javascript 本机函数,因为这需要经常完成?