Поскольку 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
, гарантированно приведет к ложным срабатываниям или отрицательным результатам. - person Xotic750   schedule 17.06.2013.hasOwnProperty
намного медленнее, чем любой другой способ проверки существования свойства (это было неожиданно для меня, TBH). - person Felix Kling   schedule 17.06.2013.hasOwnProperty
иin
имеют совсем другое значение. Цитирование документации Mozilla:"obj.hasOwnProperty(prop)" used to determine whether an object has the specified property as a direct property of that object; unlike the in operator, this method does not check down the object's prototype chain.
- person Adrien Be   schedule 14.10.2014