while en JavaScript : répéter tant qu'une condition reste vraie

while répète un bloc tant que sa condition tient, sans connaître à l'avance le nombre de tours. Sa variante do...while en garantit toujours au moins un.
3 min de lecture
Believemy logo

Une boucle for convient quand on sait déjà combien de fois répéter. Beaucoup de situations ne le disent pas : lire des pages jusqu'à la dernière, demander une saisie jusqu'à ce qu'elle soit valable, retirer des éléments jusqu'à ce qu'il n'en reste plus.

C'est le domaine de while. Il ne compte rien, il vérifie une condition avant chaque tour et s'arrête dès qu'elle devient fausse.


Définition

while évalue son expression, exécute le bloc si elle est vraie, puis recommence. Le nombre de tours dépend entièrement de ce que le bloc modifie.

JAVASCRIPT
let solde = 1000;
let mois = 0;

while (solde > 0) {
  solde -= 250;
  mois++;
}

console.log(mois);   // 4

La condition est vérifiée avant le premier tour. Si elle est fausse d'entrée, le bloc n'est jamais exécuté, ce qui est le comportement voulu la plupart du temps : une liste vide ne doit déclencher aucun traitement.


do...while garantit un premier tour

Il existe une variante où la condition est vérifiée après le bloc. Le corps s'exécute donc au moins une fois, quoi qu'il arrive.

JAVASCRIPT
let essai = 0;

do {
  essai++;
} while (essai < 3);

console.log(essai);   // 3

Le cas d'usage est celui où la condition dépend de quelque chose que le premier tour produit, comme une saisie ou une réponse de service distant : impossible de la tester avant de l'avoir obtenue. Partout ailleurs, while se lit mieux, parce que sa condition est visible en tête plutôt qu'en pied.


while (true) et sa seule porte de sortie

Quand la condition d'arrêt ne peut pas s'écrire en tête, on assume une boucle sans fin et on la quitte de l'intérieur avec break. C'est le motif classique d'une lecture par pages, où l'on ignore le nombre de pages avant d'arriver à la dernière.

JAVASCRIPT
const pages = [["a", "b"], ["c"], []];
let page = 0;
const tout = [];

while (true) {
  const lot = pages[page];
  if (!lot || lot.length === 0) break;   // seule sortie de la boucle
  tout.push(...lot);
  page++;
}

console.log(tout);   // [ 'a', 'b', 'c' ]
Bon à savoir

Le risque est réel : si aucun chemin d'exécution ne rencontre le break, la boucle tourne indéfiniment. Le réflexe à prendre est de vérifier, avant d'exécuter, que chaque branche mène quelque part, et d'ajouter un compteur de sécurité quand la condition dépend d'un service extérieur.


Questions fréquentes

Question

Quand préférer while à for ?

Quand le nombre de tours n'est pas connu au moment d'écrire la boucle. Une boucle for annonce d'emblée son point de départ, son point d'arrivée et son pas ; si ces trois informations n'existent pas, la forcer dans ce moule produit une boucle où deux des trois expressions sont vides. while exprime alors la même chose plus honnêtement.


Question

Comment éviter une boucle infinie ?

En vérifiant qu'au moins une variable de la condition change à chaque tour, et sur tous les chemins possibles. Le piège le plus fréquent vient d'un continue placé avant l'incrément : le tour repart sans que le compteur ait bougé, et la condition reste vraie pour toujours.


Question

Une boucle while bloque-t-elle la page ?

Oui, tant qu'elle tourne. JavaScript exécute une seule chose à la fois dans un onglet : une boucle longue gèle l'affichage, les clics et les animations jusqu'à sa dernière itération. Pour attendre un événement extérieur, il faut une Promise et await, jamais une boucle d'attente active.

Termes connexes

Découvrez notre glossaire JavaScript

Tous les mots de JavaScript expliqués simplement : mots-clés, objets natifs, méthodes, erreurs et concepts. Définitions claires et exemples qui tournent, pour apprendre et pour se dépanner.

Partager cet article

Tu veux nous aider ? Fais un lien vers cet article sur tes réseaux ou encore mieux : sur ton site, dans un article ou dans ta newsletter.