JavaScript中的真值总是有一个hasOwnProperty方法吗?
Does a truthy value in JavaScript always have a hasOwnProperty method?
这里我们可以看到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实际上如何调用错误处理程序,这个测试都不会抛出异常。
No.
这是一个:
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")) {
相关文章:
- hasOwnProperty-即使有属性,也不会显示属性
- 在这个使用hasOwnProperty的对象扩展程序中有一个错误,I'我不确定那个bug是什么,也不确定这个扩展
- Object.prototype.hasOwnProperty.call() vs Object.prototype.h
- 在Node.js中,我在哪里可以看到JavaScript方法的源代码,例如hasOwnProperty
- 为什么使用 Object.prototype.hasOwnProperty.call(myObj, prop) 而不是
- hasOwnProperty 在对照父对象属性进行检查时返回 true
- javascript输出true中的hasOwnProperty方法
- hasOwnProperty在For in循环中总是返回False
- 什么是hasOwnProperty和angularjs中的push
- 窗口对象通过对象类型测试,但 hasOwnProperty 导致错误
- 有没有办法从某人更改Object.prototype.hasOwnProperty中恢复
- JQuery 或 Underscore 等同于 JavaScript 的 hasOwnProperty
- hasOwnProperty 在 FF 中返回 false
- JavaScript 在 Selectize createFilter 中存在 hasOwnProperty 的问题
- 通过hasOwnProperty获取文件属性
- Getting Object.prototype.hasOwnProperty() key
- .hasOwnProperty('getComputedStyle') false in IE 11
- 在这个特定的例子中,为什么作者在for中使用if.hasOwnProperty..循环模式
- obj.hasOwnProperty(key)vs使用obj[key]直接引用
- 为什么obj.hasOwnProperty('prop')返回false时obj.rop返回true