Вебсправочник
Справочник JavaScript

Reflect.ownKeys(): все собственные строковые и символьные ключи

Reflect.ownKeys возвращает собственные ключи объекта, включая неперечислимые и символьные. Метод полезен для диагностики структуры, когда Object.keys показывает лишь часть свойств.

Назначение

Reflect.ownKeys возвращает собственные ключи объекта, включая неперечислимые и символьные. Метод полезен для диагностики структуры, когда Object.keys показывает лишь часть свойств.

Как это работает

В результат не входят ключи прототипа. Для обычного объекта учитываются собственные строковые и символьные имена независимо от enumerable. Пример сравнивает несколько способов посмотреть один объект.

Пример

const marker = Symbol("checked");
const lesson = Object.create({inherited:true});
lesson.title = "HTML";
lesson[marker] = true;
Object.defineProperty(lesson, "hiddenNote", {value:"draft"});
const keys = Reflect.ownKeys(lesson);
console.assert(keys.length === 3);
console.assert(keys.includes("title") && keys.includes("hiddenNote") && keys.includes(marker));
console.assert(!keys.includes("inherited"));
console.assert(Object.keys(lesson).join(",") === "title");
console.log(keys);

Что должно получиться

Полный список содержит три собственных ключа, а Object.keys — только перечислимый строковый title. Название hiddenNote не делает поле секретным: оно доступно при таком перечислении.

Граница применения и частая ошибка

Возвращаемый список ключей не является глубокой копией объекта и не содержит значения свойств. Proxy может задавать особое поведение собственных ключей в рамках ограничений языка. Не сериализуйте технические свойства автоматически в публичный ответ.

Самостоятельная проверка

Добавьте свойство с числовым именем и сравните порядок ключей обычного объекта. Затем проверьте Reflect.ownKeys у массива, включая length. Выберите подходящий метод для задачи, где нужны только пользовательские перечислимые поля.

Пример JavaScript проверяйте в собственном учебном файле или консоли своего проекта. Встроенная песочница справочника JavaScript не выполняет. Успешное выполнение в одной среде не гарантирует поддержку метода во всех браузерах.

Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.