由于 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')
我更愿意使用对跨浏览器最友好且最新的方法。
我还看到这个原型(prototype)被 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]);
};
}
最佳答案
hasOwnProperty 不检查未定义的值。它只检查属性是否已分配给对象,即使未定义也是如此:
var obj = { a : undefined };
obj.hasOwnProperty("a") // true
obj.a === undefined // true
obj.hasOwnProperty("b") // false
obj.b === undefined // true
关于javascript - 使用 Object.hasOwnProperty 与测试属性是否未定义的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17150396/