JavaScript метод hasOwnProperty()

JavaScript Object

Определение и применение

JavaScript метод hasOwnProperty() возвращает логическое значение, которое указывает на то содержит ли объект указанное cобственное (неунаследованное) свойство, или метод.

Метод возвращает true в том случае, если объ­ект имеет неунаследованное свойство с указанным именем и false, если объ­ект не имеет свойства с указанным именем или если это свойство он наследует от своего объекта прототипа.


Обращаю Ваше внимание, что в отличие от оператора in метод hasOwnProperty() не проверяет существование свойств в цепочке прототипов объекта.


Поддержка браузерами

МетодChrome
Chrome
Firefox
Firefox
Opera
Opera
Safari
Safari
Internet Explorer
IExplorer
Microsoft Edge
Edge
hasOwnProperty()ДаДаДаДаДаДа

JavaScript синтаксис:

obj.hasOwnProperty( prop );

Версия JavaScript

ECMAScript 3rd Edition (реализовано в JavaScript 1.5)

Значения параметров

ПараметрОписание
propСтроковое значение имени свойства поиск которого необходимо осуществить. Обязательное значение.

Пример использования

let obj = {  // инициализируем переменную, содержащую объект
    myProperty: 1000,
    myProperty2: () => console.log( "hello" )
};

// проверяем содержит ли объект указанное cобственное (неунаследованное) свойство, или метод

obj.hasOwnProperty( "myProperty" );    // true
obj.hasOwnProperty( "myProperty2" );   // true
obj.hasOwnProperty( "myProperty3" );   // false

В этом примере мы инициализировали объект в котором указали собственное свойство и метод, с использованием метода hasOwnProperty() мы проверяем содержит ли объект указанное cобственное (неунаследованное) свойство или метод. В первых двух вызовах возвращаемое значение будет true (объект содержит подобное собсвенное свойство или метод), а в последнем false.

В следующем примере мы рассмотрим с Вами как итерироваться по свойствам объекта и научимся пропускать при этом унаследованные свойства.

let fruits = {  // инициализируем переменные, содержащие объекты
    apple: 1,
    banana: 2
};

let vegetables = {  
    potato: 10,
    carrot: 20
};

vegetables.__proto__ = fruits;  // задаем прототип объекта vegetables

console.log( vegetables.apple );  // 1
console.log( vegetables.banana ); // 2

// итерируемся по объекту vegetables и выводим в консоль все неунаследованные и унаследованные свойства

for ( let vegetable in vegetables ) {
  if ( vegetables.hasOwnProperty( vegetable ) ) { // проверяем является ли свойство собственным
    console.log( "содержит " + vegetable ); // выводим в консоль если свойство неунаследовано
  }
  else {
    console.log( "не содержит " + vegetable ); // выводим в консоль если свойство унаследовано
  }
}

// содержит potato
// содержит carrot
// не содержит apple
// не содержит banana

В этом примере мы инициализировали два объекта в которых указали по два собственных свойства. С помощью свойства __proto__ мы задаем прототип объекта vegetables, в этом случае если свойство отсутствует у объекта vegetables, то поиск будет осуществлен в объекте прототипе fruits.

С использованием оператора in мы итерируемся по объекту vegetables и выводим в консоль все неунаследованные и унаследованные свойства. Обратите внимание, что оператор in проходит и по свойствам, находящимся в цепочке прототипов. Свойства, которые находятся в цепочке прототипов (унаследованные) мы фильтруем с помощью метода hasOwnProperty().

JavaScript Object