La pregunta es un poco anticuada, pero creo que todas las respuestas omiten una distinción importante. Es decir, un bucle while
espera una expresión que evacua a un condicional, es decir, un valor booleano o que se puede convertir en un booleano. Ver Mozilla docs para más detalles.
Una asignación pura (sin instanciación) se fuerza a un booleano a través de su valor de retorno predeterminado (el valor del lado derecho).
Un var
(o let
o const
) es una declaraciónque permite una asignación opcional, pero tiene un valor de retorno de undefined
.
Usted puede probar fácilmente esto en la consola:
var foo = 42; // undefined
bar = 42 // 42
Los valores devueltos por sí solas no responder a la pregunta, ya que es undefined
Falsey-, pero sí muestra que incluso si JS le permiten poner un var
en una condicional, simplemente siempre evaluaría a falso.
Otros han mencionado for
declaraciones y que permiten la declaración y creación de instancias de las variables. Esto es cierto, pero el documentation explains que for
espera una declaración o una asignación.
Las opiniones pueden variar, pero para mí todo esto se suma a una consistencia comprensible, no a una peculiaridad en el comportamiento con respecto a los bucles.Un bucle while
se considera mejor como una versión de bucle de una instrucción if
que similar a un bucle for
. Si hay algo raro en todo esto, es la divergencia total de la declaración for
de la sintaxis normal del lenguaje.
Los 2 siguientes explican la elevación de la declaración de la variable pero no explican por qué no se puede declarar una variable dentro de una condición 'while' (pero se puede, por ejemplo, en una condición' for'). ¿Alguna vez encontró una buena explicación para esto? – Barney
Otra peculiaridad de JS, por eso. –