Как определить когда использовать цикл for...in?
Основы языка
`for...in` используют для перебора ключей объекта (перечисляемых свойств). Не для массивов (даёт индексы-строки, включает прототип, не гарантирует порядок).
Когда использовать for...in
Для перебора ключей объекта:
const user = { name: 'Ann', age: 25 };
for (const key in user) {
console.log(key, user[key]); // 'name' Ann, 'age' 25
}Особенности (учитывать)
Перебирает унаследованные свойства
for...in обходит и свойства из прототипа — часто нежелательно:
for (const key in obj) {
if (obj.hasOwnProperty(key)) { // фильтр собственных свойств
// ...
}
}Не для массивов
Даёт индексы как строки, включает добавленные и унаследованные свойства:
const arr = [10, 20];
for (const i in arr) console.log(i); // '0', '1' — строки, не рекомендуетсяДля массивов — for...of или forEach.
Когда НЕ использовать
- Массивы →
for...of/forEach/for. - Если важен порядок или нужны только собственные свойства →
Object.keys/entries+for...of.
Лучшая альтернатива
for (const [key, value] of Object.entries(obj)) {
// только собственные свойства, чистый перебор
}Object.keys/values/entries не включают прототип и удобнее.
Как определить, что нужен for...in
- Нужны все перечисляемые ключи объекта, включая унаследованные →
for...in. - Обычно лучше
Object.keys/entries(собственные свойства, предсказуемо).
Коротко для собеседования
for...in используют для перебора ключей объекта (перечисляемых свойств). Учитывать: обходит унаследованные свойства (фильтровать hasOwnProperty), не для массивов (индексы-строки, порядок не гарантирован — для них for...of). Обычно лучше Object.keys/entries + for...of (только собственные свойства, предсказуемо).