PassFront
  1. PassFront
  2. База знаний
  3. Основы языка

В чем разница между 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.

Другие вопросы раздела