Javascript: проверьте, обладает ли объект свойствами
Здесь есть несколько ответов, как проверить, существует ли свойство в объекте.
Я всегда использовал
if(myObj.hasOwnProperty('propName'))
но мне интересно, есть ли разница между
if('propName' in myObj){
Ответ 1
Они почти равны, разница в том, что hasOwnProperty не проверяет цепочку прототипов, а in делает.
Пример
var test = function() {}
test.prototype.newProp = function() {}
var instance = new test();
instance.hasOwnProperty('newProp'); // false
'newProp' in instance // true
Как уже отмечалось, Object.hasOwnProperty возвращает только "собственные свойства", т.е. свойства, которые добавляются напрямую, а не свойства, добавленные в prototype.
Ответ 2
Да, есть разница. hasOwnProperty() игнорирует свойства и методы, которые добавляются с помощью prototype. Я пытаюсь объяснить с примерами. Например, если у вас есть прототип объекта
Object.prototype.something = function() {};
И позвольте сказать, что вы следуете object
var obj = {
"a" : "one",
"b" : "two"
};
И цикл:
for ( var i in obj ) {
//if (obj.hasOwnProperty(i)) {
console.log(obj[i]);
//}
}
Без hasOwnProperty он выведет one two function(), а только с hasOwnProperty() только one two