Which values does the while loop show?
For every loop iteration, write down which value it outputs and then compare it with the solution.
Both loops alert the same values, or not?
-
The prefix form
++i:let i = 0; while (++i < 5) alert( i ); -
The postfix form
i++let i = 0; while (i++ < 5) alert( i );
The task demonstrates how postfix/prefix forms can lead to different results when used in comparisons.
-
From 1 to 4
let i = 0; while (++i < 5) alert( i );The first value is
i = 1, because++ifirst incrementsiand then returns the new value. So the first comparison is1 < 5and thealertshows1.Then follow
2, 3, 4…– the values show up one after another. The comparison always uses the incremented value, because++is before the variable.Finally,
i = 4is incremented to5, the comparisonwhile(5 < 5)fails, and the loop stops. So5is not shown. -
From 1 to 5
let i = 0; while (i++ < 5) alert( i );The first value is again
i = 1. The postfix form ofi++incrementsiand then returns the old value, so the comparisoni++ < 5will usei = 0(contrary to++i < 5).But the
alertcall is separate. It’s another statement which executes after the increment and the comparison. So it gets the currenti = 1.Then follow
2, 3, 4…Let’s stop on
i = 4. The prefix form++iwould increment it and use5in the comparison. But here we have the postfix formi++. So it incrementsito5, but returns the old value. Hence the comparison is actuallywhile(4 < 5)– true, and the control goes on toalert.The value
i = 5is the last one, because on the next stepwhile(5 < 5)is false.