Zadanie pokazuje, w jaki sposób formy postfix/prefix mogą prowadzić do różnych wyników w przypadku ich wykorzystania w porównaniach.
-
Od 1 do 4
let i = 0; while (++i < 5) alert( i );
Pierwszą wartością jest
i = 1, ponieważ++inajpierw powiększyi, a następnie zwraca nową wartość. Tak więc pierwsze porównanie jest1 < 5, aalertpokazuje1.Następnie podążając
2, 3, 4...-- wartości pojawiają się jedna po drugiej. Porównanie zawsze używa zwiększonej wartości, ponieważ++jest przed zmienną.W końcu,
i = 4jest zwiększone do5, porównaniewhile(5 < 5)zawodzi, a pętla się zatrzymuje. Tak więc5nie jest pokazane. -
Od 1 do 5
let i = 0; while (i++ < 5) alert( i );
Pierwszą wartością jest ponownie
i = 1. Przyrostkowa formai++zwiększai, a następnie zwraca starą wartość, więc porównaniei++ < 5użyjei = 0(w przeciwieństwie do++i < 5).Ale zawołanie
alertjest osobne. Jest to kolejna stwierdzenie, która wykonuje się po inkrementacji i porównaniu. Więc dostaje bieżącyi = 1.Potem kolejno
2, 3, 4…Zatrzymajmy się na
i = 4. Forma prefiksu++izwiększyłaby go i użyła5w porównaniu. Ale tutaj mamy formę przyrostkowąi++. Zwiększa więcido5, ale zwraca starą wartość. Stąd porównaniewhile(4 < 5)jest prawdziwe, a kontrola przechodzi doalert.Wartość
i = 5jest ostatnią, ponieważ w następnym krokuwhile(5 < 5)jest fałszywe.