5 votes

Pourquoi ces boucles 'for(; ;)' ?

Qu'est-ce qui peut bien faire revenir le deuxième paramètre ? true ?

AVERTISSEMENT : la boucle est infinie et peut faire planter votre navigateur.

for(;;){
    //...
}

Je m'attendais vraiment à ne pas faire de boucle du tout...

Mais il est en marche, et c'est encore pire puisqu'il ne peut être en marche que si quelque chose a été évalué à true ou est-ce que je rate quelque chose ?

7voto

paislee Points 8670

Desde for MDN

for ([initialization]; [condition]; [final-expression])
   statement

[Initialization] y [final-expression] ne sont intuitivement pas nécessaires, ce qui réduit la construction à une simple while boucle. Mais la partie pertinente est :

condition
Une expression à évaluer avant chaque itération de la boucle. Si cette expression est évaluée à true, l'instruction est exécutée. Ce test conditionnel est facultatif. S'il est omis, la condition est toujours évaluée à true. Si l'expression est fausse, l'exécution passe à la première expression suivant la construction for.

(c'est moi qui souligne)

Cela semble être une décision de conception du langage JS totalement arbitraire. Si c'était mon langage, je ferais probablement une erreur de syntaxe.


Sur une note latérale amusante, for(;;){} est équivalent à while(true){} et se trouve être plus court de 4 caractères. Je me demande si les mineurs exploitent cela !

4voto

rid Points 24625

Parce que l'absence d'une condition sera toujours évaluée à true.

1voto

rob mayoff Points 124153

Il n'y a rien qui fasse que le second paramètre renvoie true ". Il n'y a pas de deuxième paramètre. La section 12.6.3 de la Spécification du langage ECMAScript (ECMA-262 5e édition) dit ceci :

a. Si le premier Expression est présent, alors

i. Soit testExprRef soit le résultat de l'évaluation de la première Expression .

ii. Si GetValue( testExprRef ) est faux , retour ( normal , V , empty ).

Le "premier Expression "auquel il fait référence est l'expression optionnelle entre les points-virgules de l'option for déclaration. Si elle est présente, le programme effectue les étapes (i) et (ii) citées ci-dessus. Si l'expression n'est pas présente, le programme n'exécute tout simplement pas les étapes (i) et (ii) de l'instruction for algorithme de déclaration.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X