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 не выполняет. Успешное выполнение в одной среде не гарантирует поддержку метода во всех браузерах.