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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
|
---
title: Object.getOwnPropertyNames()
slug: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames
tags:
- ECMAScript5
- JavaScript
- Об'єкт
- метод
translation_of: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames
---
<div>{{JSRef}}</div>
<p>Метод <strong><code>Object.getOwnPropertyNames()</code></strong> повертає масив усіх властивостей (в тому числі неперелічуваних, за винятком властивостей, що використовують символ), знайдених безпосередньо на наданому об'єкті.</p>
<div>{{EmbedInteractiveExample("pages/js/object-getownpropertynames.html")}}</div>
<h2 id="Синтаксис">Синтаксис</h2>
<pre class="brush: js">Object.getOwnPropertyNames(<var>obj</var>)</pre>
<h3 id="Параметри">Параметри</h3>
<dl>
<dt><code><var>obj</var></code></dt>
<dd>Об'єкт, чиї перелічувані та неперелічувані властивості будуть повернені.</dd>
</dl>
<h3 id="Значення_що_повертається">Значення, що повертається</h3>
<p>Масив рядків, що відповідає властивостям, знайденим безпосередньо у наданому об'єкті.</p>
<h2 id="Опис">Опис</h2>
<p><code>Object.getOwnPropertyNames()</code> повертає масив, чиї елементи є рядками, що відповідають перелічуваним та неперелічуваним властивостям, знайденим безпосередньо на наданому об'єкті <code><var>obj</var></code>. Порядок перелічуваних властивостей у масиві відповідає порядку, в якому видає властивості об'єкта цикл {{jsxref("Statements/for...in", "for...in")}} (або метод {{jsxref("Object.keys()")}}). Порядок неперелічуваних властивостей у масиві, а також порядок посеред перелічуваних властивостей, не визначені.</p>
<h2 id="Приклади">Приклади</h2>
<h3 id="Використання_Object.getOwnPropertyNames">Використання <code>Object.getOwnPropertyNames()</code></h3>
<pre class="brush: js">var arr = ['а', 'б', 'в'];
console.log(Object.getOwnPropertyNames(arr).sort());
// виведе ["0", "1", "2", "length"]
// подібний до масиву об'єкт
var obj = { 0: 'а', 1: 'б', 2: 'в' };
console.log(Object.getOwnPropertyNames(obj).sort());
// виведе ["0", "1", "2"]
// Виведення імен та значень властивостей через Array.forEach
Object.getOwnPropertyNames(obj).forEach(
function (val, idx, array) {
console.log(val + ' -> ' + obj[val]);
}
);
// виведе
// 0 -> а
// 1 -> б
// 2 -> в
// неперелічувана властивість
var my_obj = Object.create({}, {
getFoo: {
value: function() { return this.foo; },
enumerable: false
}
});
my_obj.foo = 1;
console.log(Object.getOwnPropertyNames(my_obj).sort());
// виведе ["foo", "getFoo"]
</pre>
<p>Якщо вам потрібні тільки перелічувані властивості, дивіться {{jsxref("Object.keys()")}} або скористайтесь циклом {{jsxref("Statements/for...in", "for...in")}} (зауважте, що це також поверне перелічувані властивості, знайдені у ланцюжку прототипів об'єкта, якщо тільки вони не були відфільтровані методом {{jsxref("Object.prototype.hasOwnProperty()", "hasOwnProperty()")}}).</p>
<p>Елементи, знайдені у ланцюжку прототипів, не додаються у список:</p>
<pre class="brush: js">function ParentClass() {}
ParentClass.prototype.inheritedMethod = function() {};
function ChildClass() {
this.prop = 5;
this.method = function() {};
}
ChildClass.prototype = new ParentClass;
ChildClass.prototype.prototypeMethod = function() {};
console.log(
Object.getOwnPropertyNames(
new ChildClass() // ["prop", "method"]
)
);
</pre>
<h3 id="Отримати_лише_неперелічувані_властивості">Отримати лише неперелічувані властивості</h3>
<p>Тут використовується функція {{jsxref("Array.prototype.filter()")}} для видалення перелічуваних ключів (отриманих методом {{jsxref("Object.keys()")}}) зі списка усіх ключів (отриманих методом <code>Object.getOwnPropertyNames()</code>), таким чином, повертаючи тільки неперелічувані ключі.</p>
<pre class="brush: js">var target = myObject;
var enum_and_nonenum = Object.getOwnPropertyNames(target);
var enum_only = Object.keys(target);
var nonenum_only = enum_and_nonenum.filter(function(key) {
var indexInEnum = enum_only.indexOf(key);
if (indexInEnum == -1) {
// Ключ не знайдений у ключах enum_only,
// це означає, що він є неперелічуваним,
// тому повертаємо true, щоб залишити його у фільтрі
return true;
} else {
return false;
}
});
console.log(nonenum_only);
</pre>
<h2 id="Примітки">Примітки</h2>
<p>У ES5, якщо аргумент цього методу не є об'єктом (примітив), це спричинить помилку {{jsxref("TypeError")}}. У ES2015 аргумент, що не є об'єктом, буде приведений до об'єкта.</p>
<pre class="brush: js">Object.getOwnPropertyNames('foo');
// TypeError: "foo" is not an object (код ES5)
Object.getOwnPropertyNames('foo');
// ["0", "1", "2", "length"] (код ES2015)
</pre>
<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.getownpropertynames', 'Object.getOwnPropertyNames')}}</td>
<td>{{Spec2('ESDraft')}}</td>
<td></td>
</tr>
<tr>
<td>{{SpecName('ES6', '#sec-object.getownpropertynames', 'Object.getOwnPropertyNames')}}</td>
<td>{{Spec2('ES6')}}</td>
<td></td>
</tr>
<tr>
<td>{{SpecName('ES5.1', '#sec-15.2.3.4', 'Object.getOwnPropertyNames')}}</td>
<td>{{Spec2('ES5.1')}}</td>
<td>Початкове визначення. Реалізоване у JavaScript 1.8.5.</td>
</tr>
</tbody>
</table>
<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2>
<p>{{Compat("javascript.builtins.Object.getOwnPropertyNames")}}</p>
<h2 id="Примітки_щодо_Firefox">Примітки щодо Firefox</h2>
<p>До Firefox 28 метод <code>Object.getOwnPropertyNames</code> не бачив невирішених властивостей об'єктів {{jsxref("Error")}}. Це було виправлено у пізніших версіях ({{bug("724768")}}).</p>
<h2 id="Див._також">Див. також</h2>
<ul>
<li><a href="/uk/docs/Web/JavaScript/Перелічуваність_та_належність_властивостей">Перелічуваність та належність властивостей</a></li>
<li>{{jsxref("Object.prototype.hasOwnProperty()")}}</li>
<li>{{jsxref("Object.prototype.propertyIsEnumerable()")}}</li>
<li>{{jsxref("Object.create()")}}</li>
<li>{{jsxref("Object.keys()")}}</li>
<li>{{jsxref("Array.forEach()")}}</li>
</ul>
|