> Есть ли вероятность, что количество ключей, полученных через for-in и Object.keys, будет разным для одного объекта и при каком условии (JavaScript)
Уровень: middle · Роль: frontend · Категория: Технические вопросы
Компании: Kaspersky
Стек: JavaScript
> Пример ответа
Да, такая вероятность существует. Разница возникает, когда в объекте присутствуют неперечисляемые (non-enumerable) свойства.
-
for...inперебирает только перечисляемые собственные и унаследованные свойства (по цепочке прототипов). -
Object.keys()возвращает только собственные перечисляемые свойства (без унаследованных).
Условие расхождения:
Если объект или его прототип содержит неперечисляемые свойства, то количество ключей, полученных через for...in, может быть больше, чем через Object.keys(). Например, если в прототипе есть перечисляемые свойства, for...in их учтёт, а Object.keys() - нет.
Пример:
JAVASCRIPTconst proto = { inherited: 1 };const obj = Object.create(proto);Object.defineProperty(obj, 'ownNonEnum', { enumerable: false, value: 2 });obj.ownEnum = 3;// for...in: 'ownEnum', 'inherited' (2 ключа)// Object.keys: ['ownEnum'] (1 ключ)
Таким образом, количество ключей совпадает только для объектов без унаследованных перечисляемых свойств и без неперечисляемых собственных свойств.
> Похожие задачи по frontend
Как добавить числовое свойство в объект в JavaScript
Что такое автобоксинг в JavaScript и почему можно обращаться к методам строки через точку
Какая конструкция может использоваться вместе с try-catch в JavaScript
Как перехватить исключение в JavaScript
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью