← Назад к вопросам

Что такое Object.keys?

2.0 Middle🔥 181 комментариев
#Другое

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое Object.keys()?

Object.keys() — это статический метод встроенного глобального объекта Object в JavaScript, который возвращает массив строк, представляющих все перечислимые (enumerable) свойства переданного объекта. Эти свойства возвращаются в том же порядке, в котором они бы перебирались в цикле for...in, но с ключевым отличием: Object.keys() возвращает только собственные свойства объекта, игнорируя свойства из цепочки прототипов.

Основная цель и синтаксис

const keysArray = Object.keys(targetObject);
  • targetObject: Объект, чьи перечислимые свойства нужно получить.
  • Возвращаемое значение: Новый массив строк, содержащий ключи свойств.

Как это работает: ключевые особенности

  1. Возвращает только собственные (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' не включено, так как оно унаследованное
    
  2. Возвращает только перечислимые (enumerable) свойства. Свойства, созданные через присваивание, являются перечислимыми по умолчанию. Но свойства, созданные некоторыми методами (например, Object.defineProperty() с флагом enumerable: false), не будут включены.

    const obj = {};
    obj.visible = 1;
    Object.defineProperty(obj, 'hidden', {
      value: 2,
      enumerable: false
    });
    
    console.log(Object.keys(obj)); // ['visible']
    
  3. Порядок следования ключей соответствует порядку для собственных перечислимых строковых свойств в объекте. Для числовых ключей (индексы массивов) они сортируются по возрастанию, для строковых — в порядке создания. Свойства с ключами-символами игнорируются.

    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() vs for...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).