Какой смысл от for of когда есть for in?
Прежде чем задавать подобные вопросы, было бы неплохо ознакомиться с предметом
frontender.info/es6-in-depth-iterators-and-the-for...
Глядишь, и вопрос бы отпал сам собой...
У них параметры обработки объекта не соответствуют друг другу. В for есть step и его величина. В for_in  нет. К тому же в for можно пройти массив в обратном направлении (сделать отрицательный step). Ну и кроме всех этих сравнений, если объект не массив, то как вы собираетесь применить на нём for? (или вы ошиблись и имели в виду только массив?) Такая же ситуация и с forEach. Только ещё хуже - нельзя сделать break.