La boucle while répète un bloc de code tant qu'une condition est vraie. Contrairement au for, on ne sait pas forcément à l'avance combien de tours auront lieu — c'est l'outil idéal pour 'continuer jusqu'à ce que quelque chose arrive'.
while (condition) {
// instructions répétées tant que la condition est vraie
}
C'est plus simple qu'un for : une seule condition, vérifiée avant chaque tour.
let i = 1;
while (i <= 5) {
console.log(i);
i++;
}
// 1 2 3 4 5
Déroulement :
Tu dois modifier la condition dans le corps de la boucle. Si la condition reste vraie indéfiniment, c'est la boucle infinie : page bloquée, onglet à fermer. Toujours s'assurer qu'on se rapproche de la sortie.
for ou while ?C'est la question classique. La règle simple :
for : "Je vais répéter N fois" ou "je vais parcourir un tableau". Le nombre de tours est connu, ou borné par la taille de quelque chose.while : "Je continue jusqu'à ce que ...". Le nombre de tours dépend de ce qui se passe pendant la boucle.| Situation | Choix recommandé |
|---|---|
| Afficher les 10 premiers nombres | for |
| Parcourir un tableau | for...of |
| Demander un mot de passe tant qu'il est incorrect | while |
| Lancer un dé jusqu'à obtenir un 6 | while |
| Lire un fichier ligne par ligne jusqu'à la fin | while |
Techniquement, tout for peut s'écrire avec un while et vice-versa. Le choix est une question de lisibilité.
let motDePasse = prompt("Mot de passe ?");
while (motDePasse !== "azerty123") {
motDePasse = prompt("Incorrect. Mot de passe ?");
}
alert("Bienvenue !");
Combien de tours ? Aucune idée — ça dépend de l'utilisateur. Avec for, on devrait fixer une limite arbitraire ; avec while, on exprime exactement l'intention.
let lancer = 0;
let tentatives = 0;
while (lancer !== 6) {
lancer = Math.floor(Math.random() * 6) + 1;
tentatives++;
console.log(`Lancer ${tentatives} : ${lancer}`);
}
console.log(`Il a fallu ${tentatives} lancers.`);
Math.random() renvoie un nombre entre 0 et 1. Math.floor(Math.random() * 6) + 1 donne un entier entre 1 et 6.
do...whileUne version qui exécute le bloc d'abord, puis vérifie la condition. Garantit au moins un tour.
let reponse;
do {
reponse = prompt("Tape 'oui' pour continuer");
} while (reponse !== "oui");
Avec while classique, si la condition est fausse dès le départ, le bloc n'est jamais exécuté. Avec do...while, on l'exécute au moins une fois. Utile pour les saisies utilisateur : on veut toujours poser la question au moins une fois.
Quand on prototype, on n'est pas toujours sûr que la condition deviendra fausse. Un garde-fou utile :
let lancer = 0;
let tentatives = 0;
while (lancer !== 6 && tentatives < 1000) {
lancer = Math.floor(Math.random() * 6) + 1;
tentatives++;
}
if (tentatives >= 1000) {
console.log("Bug : on a tourné 1000 fois sans obtenir 6 !?");
}
La limite (1000 ici) joue le rôle de coupe-circuit. Dès que ça part en vrille, on sort proprement au lieu de bloquer la page.
break dans un whileComme dans le for, break arrête la boucle immédiatement.
while (true) { // boucle a priori infinie
let saisie = prompt("Mot magique ?");
if (saisie === "abracadabra") {
break; // sortie quand le mot est bon
}
console.log("Non, essaie encore.");
}
while (true) est un raccourci pour "boucle jusqu'à un break". À utiliser avec parcimonie — c'est puissant mais facile à oublier d'arrêter.
while (condition) { ... } — répète tant que la condition est vraie.do { ... } while (condition) — exécute au moins une fois avant de tester.break permet de sortir d'un coup, même depuis un while (true).while, demande-toi : "qu'est-ce qui va arrêter cette boucle ?". Si tu ne peux pas répondre, tu as un bug.