1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
---
title: Object.prototype.hasOwnProperty()
slug: Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
translation_of: Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
---
<div>{{JSRef}}</div>
<p>Метод <strong><code>hasOwnProperty()</code></strong> повертає булеве значення, яке вказує, чи є задана властивість особистою властивістю об'єкта (тобто, не успадкованою).</p>
<div>{{EmbedInteractiveExample("pages/js/object-prototype-hasownproperty.html")}}</div>
<h2 id="Синтаксис">Синтаксис</h2>
<pre class="syntaxbox"><var>obj</var>.hasOwnProperty(<var>prop</var>)</pre>
<h3 id="Параметри">Параметри</h3>
<dl>
<dt><var>prop</var></dt>
<dd>Ім'я у вигляді {{jsxref("String", "рядка")}} або {{Glossary("Symbol","символ")}} властивості, яку потрібно перевірити.</dd>
</dl>
<h3 id="Вертає">Вертає</h3>
<p>{{jsxref("Boolean","Булеве значення")}}, яке вказує, чи є задана властивість особистою властивістю об'єкта.</p>
<h2 id="Опис">Опис</h2>
<p>Всі нащадки {{jsxref("Object")}} успадковують метод <code>hasOwnProperty</code>. Цей метод можна використовувати, щоб визначити, чи є вказана властивість особистою властивістю об'єкта; на відмінну від оператора {{jsxref("Operators/in", "in")}}, цей метод не перевіряє властивість у ланцюзі прототипів об'єкта. Якщо {{jsxref("Object","об'єкт")}} є {{jsxref("Array","масивом")}}, то метод <code>hasOwnProperty</code> може перевірити, чи існує індекс у масиві.</p>
<h2 id="Примітка">Примітка</h2>
<p><code>hasOwnProperty</code> повертає <code>true</code>, навіть якщо значення властивості дорівнює <code>null</code> або <code>undefined</code>.</p>
<pre class="brush: js">o = new Object();
o.propOne = null;
o.hasOwnProperty('propOne'); // повертає true
o.propTwo = undefined;
o.hasOwnProperty('propTwo'); // повертає true
</pre>
<h2 id="Приклади">Приклади</h2>
<h3 id="Використання_hasOwnProperty_для_перевірки_існування_властивості">Використання <code>hasOwnProperty</code> для перевірки існування властивості</h3>
<p>Наступний приклад визначає, чи має об'єкт <code>o</code> властивість на ім'я <code>prop</code>:</p>
<pre class="brush: js">o = new Object();
o.hasOwnProperty('prop'); // повертає false
o.prop = 'exists';
o.hasOwnProperty('prop'); // повертає true
</pre>
<h3 id="Прямі_властивості_проти_успадкованих">Прямі властивості проти успадкованих</h3>
<p>Наступний приклад демонструє різницю між прямими властивостями та успадкованими через ланцюг прототипів:</p>
<pre class="brush: js">o = new Object();
o.prop = 'exists';
o.hasOwnProperty('prop'); // повертає true
o.hasOwnProperty('toString'); // повертає false
o.hasOwnProperty('hasOwnProperty'); // повертає false
</pre>
<h3 id="Перебір_властивостей_обєкта">Перебір властивостей об'єкта</h3>
<p>Наступний приклад показує, як перебирати властивості об'єкта, не рухаючи успадковані властивості. Зауважте, що цикл {{jsxref("Statements/for...in", "for...in")}} перебирає лише перелічувані властивості, тому не слід вважати, виходячи з відсутності неперелічуваних властивостей, показаних у циклі, що <code>hasOwnProperty</code> сам обмежений суто перелічуваними елементами (як у випадку з {{jsxref("Object.getOwnPropertyNames()")}}).</p>
<pre class="brush: js">var buz = {
fog: 'stack'
};
for (var name in buz) {
if (buz.hasOwnProperty(name)) {
console.log('це властивість (' +
name + '). Значення: ' + buz[name]);
}
else {
console.log(name); // toString або щось інше
}
}
</pre>
<h3 id="Використання_hasOwnProperty_в_якості_назви_властивості">Використання <code>hasOwnProperty</code> в якості назви властивості</h3>
<p>JavaScript не захищає ім'я властивості <code>hasOwnProperty</code>; як наслідок, якщо існує можливість, що об'єкт може мати властивість з цим ім'ям, то необхідно використовувати <em>зовнішній</em> метод <code>hasOwnProperty</code>, щоб отримати правильний результат:</p>
<pre class="brush: js">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
</pre>
<p>Зауважте, що в останньому випадку не створюється нових об'єктів.</p>
<h2 id="Специфікації">Специфікації</h2>
<table class="standard-table">
<thead>
<tr>
<th scope="col">Специфікація</th>
<th scope="col">Статус</th>
<th scope="col">Коментар</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{SpecName('ESDraft', '#sec-object.prototype.hasownproperty', 'Object.prototype.hasOwnProperty')}}</td>
<td>{{Spec2('ESDraft')}}</td>
<td></td>
</tr>
<tr>
<td>{{SpecName('ES6', '#sec-object.prototype.hasownproperty', 'Object.prototype.hasOwnProperty')}}</td>
<td>{{Spec2('ES6')}}</td>
<td></td>
</tr>
<tr>
<td>{{SpecName('ES5.1', '#sec-15.2.4.5', 'Object.prototype.hasOwnProperty')}}</td>
<td>{{Spec2('ES5.1')}}</td>
<td></td>
</tr>
<tr>
<td>{{SpecName('ES3')}}</td>
<td>{{Spec2('ES3')}}</td>
<td>Початкове визначення. Реалізоване у JavaScript 1.5.</td>
</tr>
</tbody>
</table>
<h2 id="Підтримка_браузерів">Підтримка браузерів</h2>
<p>{{Compat("javascript.builtins.Object.hasOwnProperty")}}</p>
<h2 id="Див._також">Див. також</h2>
<ul>
<li><a href="/uk/docs/Web/JavaScript/Перелічуваність_та_належність_властивостей">Перелічуваність та належність властивостей</a></li>
<li>{{jsxref("Object.getOwnPropertyNames()")}}</li>
<li>{{jsxref("Statements/for...in", "for...in")}}</li>
<li>{{jsxref("Operators/in", "in")}}</li>
<li><a href="/uk/docs/Web/JavaScript/Inheritance_and_the_prototype_chain">Посібник JavaScript: Наслідування та ланцюжок прототипів</a></li>
</ul>
|