Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: Object.keys, Object.getOwnPropertyNames, for...in loop, Reflect.ownKeys, Object.getOwnPropertySymbols

Какие способы получения ключей объекта существуют в JavaScript?

Вопрос проверяет знание методов перечисления ключей объекта в JavaScript, что важно для работы с данными и отладки.

Короткий ответ

В JavaScript есть несколько способов получить ключи объекта. Object.keys() возвращает массив строковых ключей, перечисляемых свойств. Object.getOwnPropertyNames() возвращает все строковые ключи, включая неперечисляемые. for...in цикл перебирает перечисляемые ключи, включая унаследованные. Reflect.ownKeys() возвращает все ключи, включая символьные. Object.getOwnPropertySymbols() возвращает только символьные ключи.

Длинный ответ

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

Основные методы

  • Object.keys(obj) — возвращает массив строковых ключей собственных перечисляемых свойств объекта. Это самый частый способ, используемый для итерации по свойствам объекта.
  • Object.getOwnPropertyNames(obj) — возвращает массив всех строковых ключей собственных свойств объекта, включая неперечисляемые (например, свойства, созданные с флагом enumerable: false).
  • for...in цикл — перебирает все перечисляемые свойства объекта, включая унаследованные из цепочки прототипов. Обычно внутри цикла используют проверку hasOwnProperty, чтобы отфильтровать только собственные свойства.
  • Reflect.ownKeys(obj) — возвращает массив всех ключей собственных свойств объекта, включая строковые и символьные. Это самый полный метод.
  • Object.getOwnPropertySymbols(obj) — возвращает массив только символьных ключей собственных свойств объекта.

Примеры кода

Рассмотрим объект с разными типами свойств:

const obj = {
  name: 'John',
  age: 30,
  [Symbol('id')]: 123
};

// Делаем свойство неперечисляемым
Object.defineProperty(obj, 'hidden', {
  value: 'secret',
  enumerable: false
});

console.log(Object.keys(obj)); // ['name', 'age']
console.log(Object.getOwnPropertyNames(obj)); // ['name', 'age', 'hidden']
console.log(Object.getOwnPropertySymbols(obj)); // [Symbol(id)]
console.log(Reflect.ownKeys(obj)); // ['name', 'age', 'hidden', Symbol(id)]

// for...in
for (let key in obj) {
  console.log(key); // 'name', 'age'
}

Где применяются

Выбор метода зависит от задачи. Object.keys() идеален для большинства случаев, когда нужно работать только с перечисляемыми данными объекта, например, для сериализации или отображения. for...in с проверкой hasOwnProperty используется реже, но может быть полезен при анализе цепочки прототипов. Object.getOwnPropertyNames() и Reflect.ownKeys() нужны для низкоуровневых операций, метапрограммирования или при работе с библиотеками, которые определяют скрытые свойства. Object.getOwnPropertySymbols() специфичен для работы с символами, которые часто используются для создания уникальных идентификаторов или скрытия внутренних деталей реализации.

Вывод: Используйте Object.keys() для повседневных задач перебора свойств. При необходимости получить все свойства, включая скрытые или символьные, выбирайте Reflect.ownKeys() или более специфичные методы.

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#Object.keys

#Object.getOwnPropertyNames

#for...in loop

#Reflect.ownKeys

#Object.getOwnPropertySymbols

Подпишись на React Developer в телеграм