JavaScript метод keys()

JavaScript Object

Определение и применение

JavaScript метод keys() позволяет вернуть массив, содержащий имена всех собственных (неунаследованных) перечислимых свойств и методов указанного объекта.

Под перечислимыми свойствами стоит понимать те, атрибут enumerable которых имеет значение true, вследствие чего они будут перечислимы в циклах, например в цикле for...in. Атрибуты в свою очередь описываются дескрипторами свойств – это обычные объекты JavaScript, которые описывают атрибуты и значение свойства. Подробную информацию о дескрипторах свойств и атрибутах вы можете получить в описании метода defineProperty(), который позволяет определить новое или изменить существующее свойство объекта, описывая его дескрипторами.


Обращаю Ваше внимание, что порядок перечислимых свойств в массиве соответствует порядку при обходе объекта циклом for...in.


Если Вам необходимо вернуть массив, состоящий из всех имен собственных (неунаследованных) свойств и методов объекта (включая неперечислимые свойства), то Вы можете воспользоваться методом getOwnPropertyNames().

Поддержка браузерами

МетодChrome
Chrome
Firefox
Firefox
Opera
Opera
Safari
Safari
Internet Explorer
IExplorer
Microsoft Edge
Edge
keys()5.04.012.05.09.0Да

JavaScript синтаксис:

Object.keys( obj );

Версия JavaScript

ECMAScript 5.1 (реализовано в JavaScript 1.8.5)

Значения параметров

ПараметрОписание
objОбъект, собственные (неунаследованных) перечислимые свойства и методы которого должны быть возвращены в виде массива. Обязательное значение.

Исключения

Тип исключенияОписание
TypeErrorВозникает в том случае, если значение параметра, определяющее целевой объект не является объектом. Начиная с версии ECMAScript 6 параметр, который не является объектом будет сначала приведён к объекту.

Пример использования

let obj = {  // инициализируем переменную, содержащую объект
    a: 1,
    b: 2,
    c: () => (this.a + this.b)
};
let arr = ["a", "b", "c"]; // инициализируем переменную, содержащую массив
let str = "string";        // инициализируем переменную, содержащую строку

// воз­вра­ща­ем массив, состоящий из всех имен собственных свойств и методов объекта

Object.keys( obj );                   // ["a", "b", "c"]
Object.getOwnPropertyNames( obj );    // ["a", "b", "c"]

Object.keys( arr );                   // ["0", "1", "2"]
Object.getOwnPropertyNames( arr );    // ["0", "1", "2", "length"]

Object.keys( str );                   // ["0", "1", "2", "3", "4", "5"]
Object.getOwnPropertyNames( str );    // ["0", "1", "2", "3", "4", "5", "length"]

В этом примере мы инициализировали три переменные, содержащие объект, массив и строку. В первом случае с помощью метода keys() мы воз­вра­ща­ем массив, состоящий из всех имен собственных (неунаследованных) перечислимых свойств и методов объекта. Обратите внимание, что при вызове метода на строке и массиве, переменная сначала приводится к объекту.

Обратите внимание на отличие вызова методов keys() и getOwnPropertyNames(), метод getOwnPropertyNames() возвращает так же неперечислимые свойства и методы, в данном случае свойство length неперечислимо (имеет значение атрибута enumerable равное false), а метод keys() возвращает только собственные (неунаследованные) перечислимые свойства и методы.

В следующем примере мы с Вами рассмотрим как простым способом получить количество собственных свойств и методов в конкретном объекте:

let obj = {  // инициализируем переменную, содержащую объект
    a: 1,
    b: 2,
    c: () => (this.a + this.b)
};

// получаем массив, состоящий из всех имен собственных свойств и методов объекта и получаем его длину

let count = Object.keys( obj ).length;
console.log( count );  // 3
JavaScript Object