Префиксный и постфиксный тип в JavaScript
На самом деле операции инкремента и декремента
можно записывать двумя способами. Давайте
рассмотрим эти способы на примере ++
,
а для --
все будет аналогично.
В первом способе операция записывается после
имени переменной, вот так: a++
, а
во втором способе - перед именем переменной,
вот так: ++a
.
Первая форма называется постфиксной, а вторая - префиксной. Давайте посмотрим, в каких случаях проявляется разница между этими двумя формами.
Пусть у нас есть код alert(a++)
и
код alert(++a)
.
В случае alert(a++)
переменная сначала
выведется, а потом увеличится на единицу,
а в случае alert(++a)
переменная сначала
увеличится на единицу, а потом выведется.
В следующем примере первый alert
выведет
0
, так как вначале сработает вывод
на экран, а уже затем переменная увеличится:
let num = 0;
alert(num++); // выведет 0
alert(num); // выведет 1
А теперь переменная вначале увеличится, а уже затем будет вывод на экран:
let num = 0;
alert(++num); // выведет 1 - переменная увеличилась сразу
Такое поведение справедливо не только для вывода на экран, но и для присваивания:
let num1 = 0;
let num2 = num1++; // в переменную num2 запишется 0
alert(num2); // выведет 0
alert(num1); // выведет 1 - переменная num1 поменялась после записи в num2
А теперь поменяем постфиксную форму на префиксную:
let num1 = 0;
let num2 = ++num1; // в переменную num2 запишется 1
alert(num2); // выведет 1
Если наша операция выполняется на отдельной строке, то разницы между префиксной и постфиксной формами нет:
let num = 0;
++num;
num++;
alert(num); // выведет 2
Не запуская код, определите, что выведется на экран:
let num = 3;
alert(++num);
Не запуская код, определите, что выведется на экран:
let num = 3;
alert(num++);
Не запуская код, определите, что выведется на экран:
let num = 3;
alert(--num);
Не запуская код, определите, что выведется на экран:
let num = 3;
alert(num--);
Не запуская код, определите, что выведется на экран:
let num1 = 3;
let num2 = ++num1;
alert(num1);
alert(num2);
Не запуская код, определите, что выведется на экран:
let num1 = 3;
let num2 = num1++;
alert(num1);
alert(num2);
Не запуская код, определите, что выведется на экран:
let num1 = 3;
let num2 = --num1;
alert(num1);
alert(num2);
Не запуская код, определите, что выведется на экран:
let num1 = 3;
let num2 = num1--;
alert(num1);
alert(num2);
Не запуская код, определите, что выведется на экран:
let num1 = 3;
num1++;
let num2 = num1--;
alert(num1++);
alert(--num2);