for...in и for...of служат принципиально разным целям, и выбор неправильного — частый источник ошибок.
for...in — Итерация по ключам объектаfor...in проходит по перечислимым ключам свойств объекта, включая унаследованные свойства из цепочки прототипов.
const obj = { a: 1, b: 2 };
for (const key in obj) {
console.log(key); // "a", "b"
}
for...of — Итерация по значениям итерируемых объектовfor...of проходит по значениям любого итерируемого объекта — того, что реализует протокол итератора.
const arr = [10, 20, 30];
for (const value of arr) {
console.log(value); // 10, 20, 30
}
Array, String, Map, Set и генераторамиfor...in → ключи (строки); for...of → значенияfor...in включает унаследованные свойства; for...of — нетfor...of требует итерируемого объекта; for...in работает с любым объектомfor...in при переборе свойств объектаfor...of при переборе массивов, строк, Map или Setfor...of с .entries(), если нужны и индекс, и значение из массиваЦиклы for...in возвращают ключи свойств как строки, а циклы for...of возвращают реальные значения элементов итерируемого объекта.
Новый — ещё не проверен сообществом
Вы