Quelles valeurs affiche la boucle while ?
A votre avis, quelles sont les valeurs affichées pour chaque boucle ? Notez-les puis comparer avec la réponse.
Les deux boucles affichent-elles les mêmes valeurs dans l’alert
ou pas ?
-
Le préfixe sous forme
++i
:let i = 0; while (++i < 5) alert( i );
-
Le postfixe sous forme
i++
:let i = 0; while (i++ < 5) alert( i );
L’exercice montre comment les formes postfix/prefix peuvent conduire à des résultats différents lorsqu’ils sont utilisés dans des comparaisons.
-
De 1 à 4
let i = 0; while (++i < 5) alert( i );
La première valeur est
i=1
, parce que++i
incrémente d’abordi
puis renvoie la nouvelle valeur. La première comparaison est donc1 < 5
etalert
indique1
.Ensuite, viennent
2,3,4…
– les valeurs apparaissent les unes après les autres. La comparaison utilise toujours la valeur incrémentée, car++
est avant la variable.Enfin,
i=4
est incrémenté à5
, la comparaisonwhile(5 < 5)
échoue et la boucle s’arrête. Donc5
n’est pas affiché. -
De 1 à 5
let i = 0; while (i++ < 5) alert( i );
La première valeur est encore
i=1
. La forme postfixée dei++
incrémentei
puis renvoie l’ancienne valeur, la comparaisoni++ < 5
utilisera donci=0
(contrairement à++i < 5
).Mais l’appel d’
alert
est séparé. C’est une autre instruction qui s’exécute après l’incrémentation et la comparaison. Donc, on obtienti=1
.Ensuite viennent
2,3,4…
Arrêtons-nous sur
i=4
. Le préfixe sous forme++i
l’incrémenterait et utiliserait5
dans la comparaison. Mais ici nous avons la forme postfixéei++
. Donc,i
augmente à5
, mais renvoie l’ancienne valeur. Par conséquent, la comparaison est en réalitéwhile(4 < 5)
– true, et le contrôle continue àalert
.La valeur
i=5
est la dernière, car à l’étape suivantewhile(5 <5)
est faux.