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