В чем разница между for..in и for..of?
Основы языка
`for...in` перебирает ключи (свойства) объекта, а `for...of` — значения итерируемых объектов (массивов, строк, Map, Set).
for...in — по ключам объекта
const obj = { a: 1, b: 2 };
for (const key in obj) {
console.log(key, obj[key]); // 'a' 1, 'b' 2
}- Перебирает имена свойств (строки).
- Обходит и унаследованные перечисляемые свойства (из прототипа) — часто нежелательно.
- Для массивов даёт индексы как строки и не гарантирует порядок — использовать не рекомендуется.
for...of — по значениям итерируемых
for (const value of [10, 20, 30]) {
console.log(value); // 10, 20, 30
}
for (const char of 'abc') console.log(char);- Работает с массивами, строками,
Map,Set,arguments, генераторами. - Не работает с обычными объектами (они не итерируемы) — будет ошибка.
Как выбирать
- Ключи объекта → for...in (или лучше
Object.keys/entries). - Значения массива/итерируемого → for...of.
- Пары объекта →
for (const [k, v] of Object.entries(obj)).
Коротко для собеседования
for...in перебирает ключи объекта (включая унаследованные, для массивов не рекомендуется); for...of — значения итерируемых (массивы, строки, Map, Set), но не обычных объектов. Для объектов используют Object.keys/entries.