JavaScript метод Object.prototype.hasOwnProperty()
Определение и применение
JavaScript метод hasOwnProperty() возвращает логическое значение, которое указывает на то содержит ли
объект указанное собственное (неунаследованное) свойство, или метод.
Метод возвращает true в том случае, если объект имеет неунаследованное свойство с указанным именем и
false, если объект не имеет свойства с указанным именем или если это свойство он наследует от своего
объекта прототипа.
Ключом может быть строка или символ. Объект может переопределить hasOwnProperty или не иметь прототипа. В
таком случае используйте Object.hasOwn(obj, key) либо
Object.prototype.hasOwnProperty.call(obj, key). for...in — цикл перечисления строковых
ключей; оператор in проверяет наличие свойства, включая унаследованные.
Поддержка браузерами
Спецификация: ecma262
Поддерживается во всех основных браузерах с 2015 года.
| Возможность | Компьютеры | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
hasOwnProperty | 1 | 12 | 1 | 5 | 3 | 18 | 4 | 10.1 | 1 | 1.0 | 1 | 1 |
поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31
JavaScript синтаксис
obj.hasOwnProperty( prop );
Спецификация
ECMAScript: Object.prototype.hasOwnProperty()
Значения параметров
| Параметр | Описание |
|---|---|
prop |
Строковый или символьный ключ свойства поиск которого необходимо осуществить. Обязательное значение. |
Примеры, попробуйте сами
В примере «Проверка собственных ключей» показан результат вызова метода.
Проверка собственных ключей
Измените свойства исходного объекта и сравните результат до и после вызова метода.
index.html
<html lang="ru">
<head>
<meta charset="UTF-8" />
<title>Проверка собственных ключей</title>
</head>
<body>
<p>Результат выполнения выводится в консоль.</p>
</body>
</html>
main.js
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 lang="ru">
<head>
<meta charset="UTF-8" />
<title>Собственные и унаследованные ключи</title>
</head>
<body>
<p>Результат выполнения выводится в консоль.</p>
</body>
</html>
main.js
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().