С hasOwnProperty имеет некоторые оговорки и причуды (окно/широкое использование в проблемах ie8/etc).Преимущество использования Object.hasOwnProperty против тестирования, если свойство не определено
мне было интересно, если есть какая-либо причина даже использовать его, а если просто проверку, если свойство не определенно лучше оправдано & более упрощенным.
Например:
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
, если я знаю Я ищу массив или объект или функцию, я предпочитаю его еще проще: if (obj.a). Конечно, если obj.a может быть нулевым, "" или ложным, то сравнение его должно быть! == undefined требуется. Кроме того, этот объект имеет «a» в соответствии с («a» в obj), но не if (obj.a): {a: undefined} – dandavis
Дополнительная информация: Этот тест jsPerf может показаться интересным: http: // jsperf .com/hasownproperty-против-в/2. Итог: '.hasOwnProperty' ** много ** медленнее, чем любой другой способ тестирования свойства существования (что было для меня неожиданным TBH). –