La question est un peu datée, mais je pense que les réponses manquent toutes une distinction importante. C'est-à-dire qu'une boucle while
attend une expression qui s'évalue à un conditionnel, c'est-à-dire un booléen ou une valeur qui peut être convertie en un booléen. Voir Mozilla docs pour plus de détails.
Une affectation pure (sans instanciation) est contrainte à un booléen via sa valeur de retour par défaut (la valeur du côté droit).
A var
(ou let
ou const
) est une déclaration qui permet une affectation facultative, mais a une valeur de retour de undefined
.
Vous pouvez facilement tester dans votre console:
var foo = 42; // undefined
bar = 42 // 42
Les depuis undefined
est Falsey, les valeurs de retour seul ne répond pas à la question, mais montre que, même si JS vous permettent de mettre un var
dans un conditionnel il évaluerait simplement toujours à faux.
D'autres ont mentionné for
instructions et qu'elles permettent la déclaration et l'instanciation de variables. C'est vrai, mais le documentation explains que for
attend une déclaration ou un assigment.
Les opinions peuvent varier, mais pour moi, tout cela équivaut à une cohérence compréhensible et non à un comportement bizarre en ce qui concerne les boucles.Une boucle while
est mieux considérée comme une version en boucle d'une instruction if
que comme une boucle for
. S'il y a de la bizarrerie dans tout cela, c'est la divergence globale de l'instruction for
par rapport à la syntaxe normale de la langue.
Les 2 ci-dessous expliquent le levage de déclarations de variables mais n'expliquent pas pourquoi vous ne pouvez pas déclarer une variable dans une condition 'while' (mais vous pouvez, par exemple, dans une condition' for'). Avez-vous déjà trouvé une bonne explication à cela? – Barney
Une autre bizarrerie de JS, c'est pourquoi. –