由于 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]);
};
}
hasOwnProperty
之外,任何其他方法都有可能产生错误的结果。 - Xotic750.hasOwnProperty
和in
有非常不同的含义。引用Mozilla文档:"obj.hasOwnProperty(prop)"用于确定对象是否具有该对象的直接属性作为指定属性;与in运算符不同,此方法不会检查对象的原型链。
- Adriano