如何找出对象中的属性是否存在

How to Find Out if a Property in an Object Exists

本文关键字:属性 是否 存在 何找出 对象      更新时间:2023-09-26

有没有人知道一个干净的方法来找出一个对象属性是否存在?下面是我的例子:

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,那就太好了。

提前感谢!

我不能保证在任何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;
}