检查对象是不是具有属性[重复]

Posted

技术标签:

【中文标题】检查对象是不是具有属性[重复]【英文标题】:Check if an object has a property [duplicate]检查对象是否具有属性[重复] 【发布时间】:2013-12-26 05:15:24 【问题描述】:

如何在 AngularJS 中检查对象是否具有特定属性?

【问题讨论】:

如果您不知道属性的名称,那么您可以简单地检查 Object.keys(objName).length。我希望这会有所帮助。 【参考方案1】:

您可以使用 'hasOwnProperty' 来检查对象是否具有特定的 属性。

if($scope.test.hasOwnProperty('bye'))
  // do this   
else
  // do this then

这是 jsFiddle 中的 demo。

希望这有帮助。

【讨论】:

我通过指令(使用'=')传递对象,在我的指令控制器中我有这个代码sn-p用于初始化,但我得到TypeError:无法调用未定义的方法'hasOwnProperty'。你知道为什么吗? @user2985439:听起来你的对象没有test的属性。 @user2985439 正如 Felix Kling 所提到的,您的指令引用的对象没有“测试”属性。您能否更新您的问题以获取更多详细信息? scope: test:'=',controller($scope) if($scope.test.hasOwnProperty('bye')) // do stuff 这会返回类型错误.我知道测试已定义,因为我在视图中直接通过了它... 好的,我更新了我的问题。【参考方案2】:
if('bye' in $scope.test) 
else 

【讨论】:

【参考方案3】:

问题在于,您可能不仅在链接指令时会有价值 - 例如,它可以由 $http 加载。

我的建议是:

controller: function($scope) 
  $scope.$watch('test.hello', function(nv) 
     if (!nv) return; 
     // nv has the value of test.hello. You can do whatever you want and this code
     // would be called each time value of 'hello' change
  );

或者如果您知道该值只分配了一个:

controller: function($scope) 
  var removeWatcher = $scope.$watch('test.hello', function(nv) 
     if (!nv) return; 
     // nv has the value of test.hello. You can do whatever you want
     removeWatcher();
  );

此代码将删除观察者分配的“test.hello”值(来自任何控制器、ajax 等)

【讨论】:

以上是关于检查对象是不是具有属性[重复]的主要内容,如果未能解决你的问题,请参考以下文章

检查属性中是不是存在对象[重复]

JS检查深层对象属性是不是存在[重复]

如何在c#中检查对象是不是没有空属性[重复]

Javascript:检查对象是不是没有属性或映射/关联数组是不是为空[重复]

JavaScript,检查嵌套对象属性是不是为空/未定义的优雅方法[重复]

JavaScript:检查对象数组中是不是存在重复的键值并删除所有但最近添加的具有该键值的对象