JavaScript метод hasOwnProperty()
JavaScript ObjectОпределение и применение
JavaScript метод hasOwnProperty() возвращает логическое значение, которое указывает на то содержит ли объект указанное cобственное (неунаследованное) свойство, или метод.
Метод возвращает true в том случае, если объект имеет неунаследованное свойство с указанным именем и false, если объект не имеет свойства с указанным именем или если это свойство он наследует от своего объекта прототипа.
Обращаю Ваше внимание, что в отличие от оператора in метод hasOwnProperty() не проверяет существование свойств в цепочке прототипов объекта.
Поддержка браузерами
Метод | Chrome | Firefox | Opera | Safari | IExplorer | 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