检查对象是不是具有属性[重复]
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 等)
【讨论】:
以上是关于检查对象是不是具有属性[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Javascript:检查对象是不是没有属性或映射/关联数组是不是为空[重复]