Чтобы задать подобный вопрос, надо не знать, что такое
forEach
и
for...of
. Откройте документацию и разберитесь.
UPD. Что, никак? Ну вот вам тогда несколько моментов:
Выполнение
forEach
нельзя прервать (
throw
не в счёт), в то время как в теле
for...of
можно использовать
break
и
return
.
В
forEach
можно назначать контекст выполнения (через второй параметр, коллбек при этом не должен быть стрелочной функцией).
Не удастся заставить
forEach
отложить запуск следующей итерации до окончания выполнения асинхронных операций, запущенных в текущей итерации. В случае
for...of
можно добавить
async
в объявление функции, внутри которой он находится, и использовать
await
.
Если в прототипе объекта есть
Symbol.iterator
, то это ещё не означает, что и
forEach
там тоже присутствует. Впрочем, тут могут быть варианты одолжить чужой
forEach
:
Array.prototype.forEach.call('ABC', alert);
NodeList.prototype.forEach.call(document.scripts, console.log);
Дальше сами думайте, где что предпочтительнее будет использовать.