This page was translated from English by the community.Learn more and join the MDN Web Docs community.
Object.keys()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since июль 2015 г..
Сводка
МетодObject.keys() возвращает массив из собственных перечисляемых свойств переданного объекта, в том же порядке, в котором они бы обходились цикломfor...in (разница между циклом и методом в том, что цикл перечисляет свойства и из цепочки прототипов).
In this article
Синтаксис
Object.keys(obj)
Параметры
objОбъект, чьи собственные перечисляемые свойства будут возвращены.
Описание
МетодObject.keys возвращает массив строковых элементов, соответствующих именам перечисляемых свойств, найденных непосредственно в самом объекте. Порядок свойств такой же, как и при ручном перечислении свойств в объекте через цикл.
Примеры
var arr = ["a", "b", "c"];console.log(Object.keys(arr)); // консоль: ['0', '1', '2']// Массивоподобный объектvar obj = { 0: "a", 1: "b", 2: "c" };console.log(Object.keys(obj)); // консоль: ['0', '1', '2']// Массивоподобный объект со случайным порядком ключейvar an_obj = { 100: "a", 2: "b", 7: "c" };console.log(Object.keys(an_obj)); // консоль: ['2', '7', '100']// Свойство getFoo является не перечисляемым свойствомvar my_obj = Object.create( {}, { getFoo: { value: function () { return this.foo; }, }, },);my_obj.foo = 1;console.log(Object.keys(my_obj)); // консоль: ['foo']Если вы хотите увидеть все свойства, а не только перечисляемые, смотрите методObject.getOwnPropertyNames().
Примечания
В ES5, если аргумент метода не является объектом (является примитивным значением), будет выброшено исключениеTypeError. В ES2015 такой аргумент будет приведён к объекту.
> Object.keys('foo')TypeError: 'foo' is not an object // код ES5> Object.keys('foo')['0', '1', '2'] // код ES2015Полифил
Для добавления поддержки совместимого методаObject.keys в старых окружениях, которые его ещё не реализуют, скопируйте следующий кусок кода:
// From https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/keysif (!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 !== "object" && (typeof obj !== "function" || 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 (англ.).
Спецификации
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-object.keys> |