Уже давно пора использовать es6, итерация по массиву с for..of намного приятнее.
А пока, while и for отличаются между собой как слова "цикл" и "итерация". Немного лирики)
- "Через цикл можно осуществить итерацию, но через итерацию нельзя выразить цикл."
- или, "Не любой цикл является итерацией, но любая итерация является циклом"
Пример: когда for становится эквивалентным while - это for(;condition;){}, но так писать не имеет смысла, такой statement должен сколапсировать в while(condition){}.
Из этого следует, что while более универсальный, тем самым менее выразительный. Тогда как for нацелен лишь на итерацию, тем самым более выразительный.
Так и что использовать? Как по мне, так это то, что вам нравится. Меня всегда настораживает, когда кто-то упрекает стилистику кода, ну а здесь и вовсе не может быть дискуссий, ведь оба варианта одинаково-хорошо лаконичны, и в производительности различиями можно пренебречь.
А вот за for(var i in array){} и вправду можно обосновано поупрекать.