Подтвердить что ты не робот

Javascript: проверьте, обладает ли объект свойствами

Здесь есть несколько ответов, как проверить, существует ли свойство в объекте.

Я всегда использовал

if(myObj.hasOwnProperty('propName'))

но мне интересно, есть ли разница между

if('propName' in myObj){
4b9b3361

Ответ 1

Они почти равны, разница в том, что hasOwnProperty не проверяет цепочку прототипов, а in делает.

Пример

var test = function() {}

test.prototype.newProp = function() {}

var instance = new test();

instance.hasOwnProperty('newProp'); // false
'newProp' in instance // true

FIDDLE

Как уже отмечалось, 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

Посмотрите различия между Сначала и Вторые DEMOS