--- title: Object.prototype.hasOwnProperty() slug: Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty translation_of: Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty ---
Метод hasOwnProperty() повертає булеве значення, яке вказує, чи є задана властивість особистою властивістю об'єкта (тобто, не успадкованою).
obj.hasOwnProperty(prop)
{{jsxref("Boolean","Булеве значення")}}, яке вказує, чи є задана властивість особистою властивістю об'єкта.
Всі нащадки {{jsxref("Object")}} успадковують метод hasOwnProperty. Цей метод можна використовувати, щоб визначити, чи є вказана властивість особистою властивістю об'єкта; на відмінну від оператора {{jsxref("Operators/in", "in")}}, цей метод не перевіряє властивість у ланцюзі прототипів об'єкта. Якщо {{jsxref("Object","об'єкт")}} є {{jsxref("Array","масивом")}}, то метод 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
Наступний приклад показує, як перебирати властивості об'єкта, не рухаючи успадковані властивості. Зауважте, що цикл {{jsxref("Statements/for...in", "for...in")}} перебирає лише перелічувані властивості, тому не слід вважати, виходячи з відсутності неперелічуваних властивостей, показаних у циклі, що hasOwnProperty сам обмежений суто перелічуваними елементами (як у випадку з {{jsxref("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
Зауважте, що в останньому випадку не створюється нових об'єктів.
| Специфікація | Статус | Коментар |
|---|---|---|
| {{SpecName('ESDraft', '#sec-object.prototype.hasownproperty', 'Object.prototype.hasOwnProperty')}} | {{Spec2('ESDraft')}} | |
| {{SpecName('ES6', '#sec-object.prototype.hasownproperty', 'Object.prototype.hasOwnProperty')}} | {{Spec2('ES6')}} | |
| {{SpecName('ES5.1', '#sec-15.2.4.5', 'Object.prototype.hasOwnProperty')}} | {{Spec2('ES5.1')}} | |
| {{SpecName('ES3')}} | {{Spec2('ES3')}} | Початкове визначення. Реалізоване у JavaScript 1.5. |
{{Compat("javascript.builtins.Object.hasOwnProperty")}}