如何确定对象中的属性是否存在

时间:2015-08-12 11:50:27

标签: javascript object javascript-objects

有没有人知道找出对象属性是否存在的简洁方法?这是我的例子:

var test = {
  a : 'west',
  b : {
    a : 'rest'
  },
  d : {
    a : 'pest'
  }
};
// I want to access 'a' in 'c'
typeof test.c.a; // fails!

typeof似乎无法解决'c'不存在的问题,以检查其中是否存在'a'(我也尝试过) jQuery.type()也以同样的方式失败 - 我原以为它会在该函数内部进行错误检查。)

在这个示例中,我当然可以先检查'c'是否存在,但在我的实际情况中,我有一个大而深的对象,我需要从任何可能的位置动态检索数据,所以如果有的话会很好是一个现成的解决方案,不需要使用try-catch

提前致谢!

1 个答案:

答案 0 :(得分:0)

我无法保证在任何js框架中用于查找嵌套属性的任何现有功能,但您当然可以自己动手。

hasOwnProperty是ECMA脚本标准的一部分。

if(test.hasOwnProperty("c"))
{
   console.log("test.c = " + test.c);
}

如果您希望找到深层嵌套的属性,那么您可以滚动自己的函数来检查嵌套属性是否存在,如果存在,则返回它。

function hasNestedProperty(testObject, properties)
{
  var maxDepth = properties.length;
  var i, hasProperty = false;
  var currObj = testObject;
  
  while(hasProperty && i < maxDepth)
  {
      if(currObj.hasOwnProperty(properties[i])
      {
         currObj = currObj[properties[i]]);
         i ++;
      }
      else
      {
         hasProperty = false;
      }
  }
                                  
  return hasProperty;
}