Here我们可以看到JavaScript / ECMAScript中哪些类型的对象评估为false
。
我的问题是:如果变量评估为true
,是否保证有hasOwnProperty
方法?
换句话说,以下测试安全吗?
if (bar && bar.hasOwnProperty("foo")) { ... }
我的目标是防止像Cannot read property 'hasOwnProperty' of null
这样的例外。
我的应用场景:在AngularJS $http
服务错误处理程序中,我希望为所有情况做好准备。这对我来说有点困难,因为我对JavaScript没有太大的经验,并且可能无法轻易地测试可能调用此错误处理程序的不同情况。错误处理程序函数具有以下签名:
function(data, status, headers, config) {}
在函数体中,我像这样评估data
:
if (data && data.hasOwnProperty("error")) {
alert(data.error);
}
在任何情况下,这对您来说都是安全的吗?无论AngularJS如何实际调用错误处理程序,此测试都不会抛出异常,这是安全的。
答案 0 :(得分:4)
没有
这是一个:
var bar = Object.create(null);
这是hasOwnProperty
的另一个,但不是更好:
var bar = {hasOwnProperty:function(){ throw "bouh" }};
但你可以打电话
Object.prototype.hasOwnProperty.call(bar, "foo")
请注意,您可以通过执行
来避免评估if (Object.prototype.hasOwnProperty.call(Object(bar), "foo")) {