JavaScript检查是否定义了属性

时间:2013-02-15 17:49:19

标签: javascript

检查是否定义了像obj.prop.otherprop.another这样的对象属性的推荐方法是什么?

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

这很有效,但足够难看。

3 个答案:

答案 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) { ... }

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