JavaScript 如何检查属性是否已定义

6

如何推荐地检查对象属性(例如obj.prop.otherprop.another)是否已定义?

if(obj && obj.prop && obj.prop.otherprop && obj.prop.otherprop.another)

这个功能能够正常运行,但是比较丑陋。


https://dev59.com/_HVC5IYBdhLWcg3w9GHM - JonH
@JonH 不,不是真的... - Matt Ball
3个回答

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 ;
}

请不要使用这个...我建议这样做很愚蠢。 - jagzviruz

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');

... 但我想实际答案是没有一个最佳实践。至少我不知道有。


0
如果你想要开个玩笑,这个可以用:
if ((((obj || {}).prop || {}).anotherprop || {}).another) { ... }

但我不知道初始化三个新对象是否真的值得不必反复输入路径。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接