> Есть ли вероятность, что количество ключей, полученных через for-in и Object.keys, будет разным для одного объекта и при каком условии (JavaScript)

Уровень: middle · Роль: frontend · Категория: Технические вопросы

Компании: Kaspersky

Стек: JavaScript

> Пример ответа

Да, такая вероятность существует. Разница возникает, когда в объекте присутствуют неперечисляемые (non-enumerable) свойства.

  • for...in перебирает только перечисляемые собственные и унаследованные свойства (по цепочке прототипов).

  • Object.keys() возвращает только собственные перечисляемые свойства (без унаследованных).

Условие расхождения:
Если объект или его прототип содержит неперечисляемые свойства, то количество ключей, полученных через for...in, может быть больше, чем через Object.keys(). Например, если в прототипе есть перечисляемые свойства, for...in их учтёт, а Object.keys() - нет.

Пример:

JAVASCRIPT
const 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 ключ)

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

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью