Выбор ответа Junior Итераторы и генераторы спрашивают часто обновлено

for...in против for...of на массиве

Вопрос

Что выведут два цикла?

const letters = ['a', 'b'];
for (const x in letters) console.log(x);
for (const x of letters) console.log(x);

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Первый: '0', '1' (строки); второй: a, b. for...in перебирает перечисляемые ключи объекта, включая унаследованные, а у массива ключи это строки '0' и '1', не числа. for...of использует протокол итерации и выдаёт значения.

Варианты ответа

  1. Первый: '0', '1' (строки); второй: a, bправильный ответ
  2. Оба цикла выведут значения: a, b и снова a, b
  3. Первый: значения a, b; второй: индексы 0, 1
  4. Первый: числа 0, 1; второй: значения a, b

Разбор

for...in перебирает перечисляемые ключи объекта, включая унаследованные, а у массива ключи это строки '0' и '1', не числа. for...of использует протокол итерации и выдаёт значения. Поэтому для массивов нужен for...of (или методы массива), а for...in предназначен для обычных объектов, да и там его заменяют Object.keys.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.