Метод hasOwnProperty()
повертає булеве значення, яке вказує, чи є задана властивість особистою властивістю об'єкта (тобто, не успадкованою).
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Синтаксис
obj.hasOwnProperty(prop)
Параметри
Вертає
Булеве значення
, яке вказує, чи є задана властивість особистою властивістю об'єкта.
Опис
Всі нащадки Object
успадковують метод hasOwnProperty
. Цей метод можна використовувати, щоб визначити, чи є вказана властивість особистою властивістю об'єкта; на відмінну від оператора in
, цей метод не перевіряє властивість у ланцюзі прототипів об'єкта. Якщо об'єкт
є масивом
, то метод hasOwnProperty
може перевірити, чи існує індекс у масиві.
Примітка
hasOwnProperty
повертає true
, навіть якщо значення властивості дорівнює null
або undefined
.
o = new Object();
o.propOne = null;
o.hasOwnProperty('propOne'); // повертає true
o.propTwo = undefined;
o.hasOwnProperty('propTwo'); // повертає true
Приклади
Використання hasOwnProperty для перевірки існування властивості
Наступний приклад визначає, чи має об'єкт o
властивість на ім'я prop
:
o = new Object();
o.hasOwnProperty('prop'); // повертає false
o.prop = 'exists';
o.hasOwnProperty('prop'); // повертає true
Прямі властивості проти успадкованих
Наступний приклад демонструє різницю між прямими властивостями та успадкованими через ланцюг прототипів:
o = new Object();
o.prop = 'exists';
o.hasOwnProperty('prop'); // повертає true
o.hasOwnProperty('toString'); // повертає false
o.hasOwnProperty('hasOwnProperty'); // повертає false
Перебір властивостей об'єкта
Наступний приклад показує, як перебирати властивості об'єкта, не рухаючи успадковані властивості. Зауважте, що цикл for...in
перебирає лише перелічувані властивості, тому не слід вважати, виходячи з відсутності неперелічуваних властивостей, показаних у циклі, що hasOwnProperty
сам обмежений суто перелічуваними елементами (як у випадку з Object.getOwnPropertyNames()
).
var buz = {
fog: 'stack'
};
for (var name in buz) {
if (buz.hasOwnProperty(name)) {
console.log('це властивість (' +
name + '). Значення: ' + buz[name]);
}
else {
console.log(name); // toString або щось інше
}
}
Використання hasOwnProperty в якості назви властивості
JavaScript не захищає ім'я властивості hasOwnProperty
; як наслідок, якщо існує можливість, що об'єкт може мати властивість з цим ім'ям, то необхідно використовувати зовнішній метод hasOwnProperty
, щоб отримати правильний результат:
var foo = {
hasOwnProperty: function() {
return false;
},
bar: 'Небезпечна зона'
};
foo.hasOwnProperty('bar'); // завжди повертає false
// Використаємо hasOwnProperty іншого об'єкта
// і викличемо його з 'this', рівним foo
({}).hasOwnProperty.call(foo, 'bar'); // true
// Також можна використати властивість hasOwnProperty
// з прототипа Object для цієї мети
Object.prototype.hasOwnProperty.call(foo, 'bar'); // true
Зауважте, що в останньому випадку не створюється нових об'єктів.
Специфікації
Специфікація | Статус | Коментар |
---|---|---|
ECMAScript (ECMA-262) The definition of 'Object.prototype.hasOwnProperty' in that specification. |
Living Standard | |
ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'Object.prototype.hasOwnProperty' in that specification. |
Standard | |
ECMAScript 5.1 (ECMA-262) The definition of 'Object.prototype.hasOwnProperty' in that specification. |
Standard | |
ECMAScript 3rd Edition (ECMA-262) | Standard | Початкове визначення. Реалізоване у JavaScript 1.5. |
Підтримка браузерів
BCD tables only load in the browser