--- title: Object.keys() slug: Web/JavaScript/Reference/Global_Objects/Object/keys tags: - ECMAScript5 - JavaScript - Method - Object - Об'єкт - метод translation_of: Web/JavaScript/Reference/Global_Objects/Object/keys ---
Метод Object.keys() повертає масив імен особистих перелічуваних властивостей переданого об'єкта в тому самому порядку, що його повертає звичайний цикл.
{{EmbedInteractiveExample("pages/js/object-keys.html")}}
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.
Object.keys(obj)
objМасив рядків, що передають імена всіх перелічуваних властивостей переданого об'єкта.
Object.keys() повертає масив рядків, що передають імена перелічуваних властивостей, які належать безпосередньо об'єктові obj. Порядок отриманих властивостей збігається із тим, що його забезпечує перебір властивостей вручну за допомогою циклу.
// простий масив
var arr = ['а', 'б', 'в'];
console.log(Object.keys(arr)); // виводить ['0', '1', '2']
// масив як об'єкт
var obj = { 0: 'а', 1: 'б', 2: 'в' };
console.log(Object.keys(obj)); // виводить ['0', '1', '2']
// масив як об'єкт з випадковим порядком ключів
var anObj = { 100: 'а', 2: 'б', 7: 'в' };
console.log(Object.keys(anObj)); // виводить ['2', '7', '100']
// getFoo є неперелічуваною властивістю
var myObj = Object.create({}, {
getFoo: {
value: function () { return this.foo; }
}
});
myObj.foo = 1;
console.log(Object.keys(myObj)); // виводить ['foo']
Якщо вам потрібні усі властивості, навіть неперелічувані, зверніть увагу на {{jsxref("Object.getOwnPropertyNames()")}}.
У ES5 метод викидає {{jsxref("Global_Objects/TypeError", "TypeError")}}, якщо арґумент не є об'єктом (а натомість є {{glossary("Primitive", "простою величиною")}}). Водночас у ES2015 арґумент, що належить до простого типу даних, буде перетворено на об'єкт.
Object.keys('foo');
// TypeError: "foo" is not an object (код ES5)
Object.keys('foo');
// ["0", "1", "2"] (код ES2015)
Для старіших середовищ, де метод Object.keys() відсутній, можна забезпечити запасний варіант, скориставшись таким кодом:
// З https://developer.mozilla.org/uk/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
if (!Object.keys) {
Object.keys = (function() {
'use strict';
var hasOwnProperty = Object.prototype.hasOwnProperty,
hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString'),
dontEnums = [
'toString',
'toLocaleString',
'valueOf',
'hasOwnProperty',
'isPrototypeOf',
'propertyIsEnumerable',
'constructor'
],
dontEnumsLength = dontEnums.length;
return function(obj) {
if (typeof obj !== 'function' && (typeof obj !== 'object' || obj === null)) {
throw new TypeError('Object.keys called on non-object');
}
var result = [], prop, i;
for (prop in obj) {
if (hasOwnProperty.call(obj, prop)) {
result.push(prop);
}
}
if (hasDontEnumBug) {
for (i = 0; i < dontEnumsLength; i++) {
if (hasOwnProperty.call(obj, dontEnums[i])) {
result.push(dontEnums[i]);
}
}
}
return result;
};
}());
}
Зауважте, що наведений код у IE7 (а також, можливо, у IE8) повертає також неперелічувані властивості для об'єктів, що їх отримано з іншого вікна.
Простий запасний варіант для переглядача можна знайти в статті Javascript - Object.keys Browser Compatibility.
| Специфікація | Статус | Коментар |
|---|---|---|
| {{SpecName('ES5.1', '#sec-15.2.3.14', 'Object.keys')}} | {{Spec2('ES5.1')}} | Первинне визначення. Реалізовано у JavaScript 1.8.5. |
| {{SpecName('ES6', '#sec-object.keys', 'Object.keys')}} | {{Spec2('ES6')}} | |
| {{SpecName('ESDraft', '#sec-object.keys', 'Object.keys')}} | {{Spec2('ESDraft')}} |
{{Compat("javascript.builtins.Object.keys")}}