С for
MDN
for ([initialization]; [condition]; [final-expression])
statement
[Initialization]
и [final-expression]
интуитивно не требуются, сводя конструкцию к простой петле while
. Но соответствующая часть:
состояние
Выражение, которое будет оцениваться перед каждой итерацией цикла. Если это выражение имеет значение true, оператор выполняется. Этот условный тест не является обязательным. Если опущено, условие всегда оценивается как true. Если выражение оценивается как false, выполнение переходит к первому выражению, следующему за конструкцией for.
(акцент мой)
Похоже, это совершенно произвольное решение по проектированию языка JS. Если бы это был мой язык, я бы, вероятно, выдал синтаксическую ошибку.
На игривом примечании for(;;){}
эквивалентно while(true){}
и на 4 символа короче. Интересно, используют ли минифинеры это!