Для объектов и массивов разные идиомы: ключи vs значения, own vs inherited, индекс vs элемент.
Объекты
for...in — enumerable ключи, включая унаследованные → фильтруйте Object.hasOwn.
Object.keys / values / entries — own enumerable string keys.
for (const key ofObject.keys(obj)) {
console.log(key, obj[key]);
}
Массивы
for по индексу — полный контроль.
for...of — значения (и любые iterable).
forEach / map / filter — функциональный стиль.
for...in по массиву — обычно плохая идея (ключи-строки, унаследованное).
Итог
Объекты: keys/entries или аккуратный for...in. Массивы: for/for...of/методы массива.
На собеседовании
Ожидают не заученную таблицу, а умение связать концепцию с багом из практики: что сломается, если выбрать неправильный вариант, и какой код вы напишете в реальном PR. Короткий пример и граничный случай обычно ценятся выше длинной теории.
Какими конструкциями итерировать свойства объекта и элементы массива? · Sobeso