JavaScript метод Object.prototype.hasOwnProperty()

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

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

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

Ключом может быть строка или символ. Объект может переопределить hasOwnProperty или не иметь прототипа. В таком случае используйте Object.hasOwn(obj, key) либо Object.prototype.hasOwnProperty.call(obj, key). for...in — цикл перечисления строковых ключей; оператор in проверяет наличие свойства, включая унаследованные.

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

Спецификация: ecma262

Поддерживается во всех основных браузерах с 2015 года.

Показать браузеры
Совместимостьjavascript.builtins.Object.hasOwnProperty
ВозможностьКомпьютерыМобильные
ChromeEdgeFirefoxOperaSafariChrome AndroidFirefox for AndroidOpera AndroidSafari on iOSSamsung BrowserWebView AndroidWebView on iOS
hasOwnProperty✓1✓12✓1✓5✓3✓18✓4✓10.1✓1✓1.0✓1✓1

поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31

JavaScript синтаксис

JavaScript
obj.hasOwnProperty( prop );

Спецификация

ECMAScript: Object.prototype.hasOwnProperty()

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

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

Примеры, попробуйте сами

В примере «Проверка собственных ключей» показан результат вызова метода.

Проверка собственных ключей

Измените свойства исходного объекта и сравните результат до и после вызова метода.

index.html
HTML
<!doctype html>
<html lang="ru">
  <head>
    <meta charset="UTF-8" />
    <title>Проверка собственных ключей</title>
  </head>
  <body>
    <p>Результат выполнения выводится в консоль.</p>
  </body>
</html>
main.js
JavaScript
let obj = {
    // инициализируем переменную, содержащую объект
    myProperty: 1000,
    myProperty2: () => console.log('hello'),
}

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

console.log(obj.hasOwnProperty('myProperty')) // true
console.log(obj.hasOwnProperty('myProperty2')) // true
console.log(obj.hasOwnProperty('myProperty3')) // false

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

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

В примере «Собственные и унаследованные ключи» показан результат вызова метода.

Собственные и унаследованные ключи

Измените свойства исходного объекта и сравните результат до и после вызова метода.

index.html
HTML
<!doctype html>
<html lang="ru">
  <head>
    <meta charset="UTF-8" />
    <title>Собственные и унаследованные ключи</title>
  </head>
  <body>
    <p>Результат выполнения выводится в консоль.</p>
  </body>
</html>
main.js
JavaScript
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.

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