JavaScript中的truthy值是否始终具有hasOwnProperty方法?

时间:2015-05-26 19:01:35

标签: javascript

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如何实际调用错误处理程序,此测试都不会抛出异常,这是安全的。

1 个答案:

答案 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")) {