Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое Object.keys()?
Object.keys() — это статический метод встроенного глобального объекта Object в JavaScript, который возвращает массив строк, представляющих все перечислимые (enumerable) свойства переданного объекта. Эти свойства возвращаются в том же порядке, в котором они бы перебирались в цикле for...in, но с ключевым отличием: Object.keys() возвращает только собственные свойства объекта, игнорируя свойства из цепочки прототипов.
Основная цель и синтаксис
const keysArray = Object.keys(targetObject);
targetObject: Объект, чьи перечислимые свойства нужно получить.- Возвращаемое значение: Новый массив строк, содержащий ключи свойств.
Как это работает: ключевые особенности
-
Возвращает только собственные (own) свойства. Метод не включает свойства, унаследованные через прототип (
__proto__или[[Prototype]]).const animal = { eats: true }; const rabbit = { jumps: true, name: 'Bunny' }; Object.setPrototypeOf(rabbit, animal); console.log(Object.keys(rabbit)); // ['jumps', 'name'] // Свойство 'eats' не включено, так как оно унаследованное -
Возвращает только перечислимые (enumerable) свойства. Свойства, созданные через присваивание, являются перечислимыми по умолчанию. Но свойства, созданные некоторыми методами (например,
Object.defineProperty()с флагомenumerable: false), не будут включены.const obj = {}; obj.visible = 1; Object.defineProperty(obj, 'hidden', { value: 2, enumerable: false }); console.log(Object.keys(obj)); // ['visible'] -
Порядок следования ключей соответствует порядку для собственных перечислимых строковых свойств в объекте. Для числовых ключей (индексы массивов) они сортируются по возрастанию, для строковых — в порядке создания. Свойства с ключами-символами игнорируются.
const example = { 10: 'ten', 2: 'two', b: 'bee', a: 'ay' }; console.log(Object.keys(example)); // ['2', '10', 'b', 'a']
Практическое применение в разработке
Метод Object.keys() — один из самых часто используемых инструментов для работы с объектами.
-
Итерация по свойствам объекта (без
for...in). Это более безопасная альтернатива, так как исключает свойства прототипа.const user = { name: 'Alice', age: 30, role: 'admin' }; Object.keys(user).forEach(key => { console.log(`${key}: ${user[key]}`); }); // name: Alice // age: 30 // role: admin -
Проверка, пуст ли объект. Удобный и читаемый способ.
const isEmpty = (obj) => Object.keys(obj).length === 0; console.log(isEmpty({})); // true console.log(isEmpty({a: 1})); // false -
Получение массива значений или пар «ключ-значение».
const config = { theme: 'dark', lang: 'ru', refresh: 60 }; const values = Object.keys(config).map(key => config[key]); console.log(values); // ['dark', 'ru', 60] const entries = Object.keys(config).map(key => [key, config[key]]); console.log(entries); // [['theme', 'dark'], ['lang', 'ru'], ['refresh', 60]]
*(Примечание: для этого также существуют специализированные методы `Object.values()` и `Object.entries()`).*
- Селективное копирование или модификация свойств (простые случаи).
const original = { a: 1, b: 2, internal: 'secret' }; const publicCopy = {}; Object.keys(original) .filter(key => key !== 'internal') .forEach(key => { publicCopy[key] = original[key] }); console.log(publicCopy); // { a: 1, b: 2 }
Важные нюансы и сравнение с другими методами
-
Object.keys()vsfor...in: Циклfor...inтакже проходит по перечислимым свойствам, но включает и унаследованные. Поэтому при его использовании часто требуется дополнительная проверкаobj.hasOwnProperty(key).Object.keys()делает это «из коробки». -
Семейство методов
Object.*:
* **`Object.values(obj)`** – возвращает массив значений свойств.
* **`Object.entries(obj)`** – возвращает массив пар `[ключ, значение]`.
* **`Object.getOwnPropertyNames(obj)`** – возвращает массив ВСЕХ собственных свойств, включая неперечислимые (но не свойства-символы).
- Работа с массивами: Для массивов
Object.keys(arr)вернёт массив строковых индексов.const arr = ['a', 'b', 'c']; console.log(Object.keys(arr)); // ['0', '1', '2']
Итог: Object.keys() — это фундаментальный, надежный и предсказуемый метод для получения массива ключей собственных перечислимых свойств объекта. Его широкое использование в современном фронтенд-разработке обусловлено чистотой, производительностью и удобством при манипуляциях с данными, которые часто представлены в виде объектов (например, состояния в Redux, пропсы и стейты в React, конфигурации, ответы от API).