由于hasOwnProperty有一些注意事项和怪癖(在 Internet Explorer 8 问题中的窗口/广泛使用等):
有什么理由甚至使用它吗?如果只是测试一个属性是否未定义,是否更合理和更简单?
例如:
var obj = { a : 'here' };
if (obj.hasOwnProperty('a')) { /* do something */ }
if (obj.a !== undefined) { /* do something */ }
// Or maybe (typeof (obj.a) !== 'undefined')
我更喜欢使用对跨浏览器最友好且最新的方法。
我还看到这个原型被 hasOwnProperty 覆盖,它可以工作,但我并没有因为它的实用性而被卖掉......
if (!Object.prototype.hasOwnProperty) {
Object.prototype.hasOwnProperty = function(prop) {
var proto = this.__proto__ || this.constructor.prototype;
return (prop in this) && (!(prop in proto) || proto[prop] !== this[prop]);
};
}