执行以下操作可能会出现异常“未定义上没有栏”
var obj = o.Foo.Bar
我能想到安全地做上面的唯一方法:
var obj = (o && o.Foo && o.Foo.Bar ) ? o.Foo.Bar : null;
或者将整个事情放在 try/catch 中,这在大多数情况下对我来说不是一个选项。如果我想要根据缺少的属性发生不同的事情,则会导致更多代码。
有没有一种简洁的方法可以安全地执行此任务?
**更新**
调整了@techfoobar 的答案
function resolve(obj, propertyPath) {
if (!propertyPath) return;
var props = propertyPath.split('.');
var o = obj;
for(var i in props) {
o = o[props[i]];
if(!o) return false;
}
return o;
}
var res = resolve(obj, 'ApiResponse.CommandResponse');
if (res){
for (var i in res){
看起来就像它会得到的一样好......