检查是否定义了像obj.prop.otherprop.another这样的对象属性的推荐方法是什么?
if(obj && obj.prop && obj.prop.otherprop && obj.prop.otherprop.another)
这很有效,但足够难看。
答案 0 :(得分:3)
最有效的方法是在try {} catch(exception){}块中检查obj.prop.otherprop.another。如果剩下的都存在,那将是最快的;否则将处理异常。
var a = null;
try {
a = obj.prop.otherprop.another;
} catch(e) {
obj = obj || {};
obj.prop = obj.prop || {};
obj.prop.otherprop = obj.prop.otherprop || {};
obj.prop.otherprop.another = {};
a = obj.prop.otherprop.another ;
}
答案 1 :(得分:0)
不是说这更好但是......
x = null
try {
x = obj.prop.otherprop.another;
} catch() {}
// ...
或者......
function resolve(obj, path) {
path = path.split('.');
while (path.length && obj) obj = obj[path.shift()];
return obj;
}
x = resolve(obj, 'prop.otherprop.another');
...但我猜实际答案是没有最好的做法。不是我知道的。
答案 2 :(得分:0)
如果你心情愚蠢,这可行:
if ((((obj || {}).prop || {}).anotherprop || {}).another) { ... }
但我不知道初始化三个新对象是否真的值得重复输入路径。