Рассмотрим следующий код:
let num = 0;
num = num + 1; // прибавляем к переменной num число 1
alert(num); // выведет 1
Как вы уже знаете, этот код можно переписать
в сокращенном виде через оператор +=
:
let num = 0;
num += 1; // прибавляем к переменной num число 1
alert(num); // выведет 1
На самом деле прибавление единицы в программировании
встречается так часто, что для этой операции
придуман еще более сокращенный синтаксис
- специальный оператор инкремент ++
, увеличивающий
значение переменной на 1
.
Перепишем наш код с его помощью:
let num = 0;
num++; // прибавляем к переменной a число 1
alert(num); // выведет 1
Есть также операция
декремент --
, уменьшающая значение переменной
на 1
. Смотрите пример:
let num = 0;
num--; // отнимаем от переменной num число 1
alert(num); // выведет -1
Переделайте этот код так, чтобы в нем операции инкремента и декремента:
let num = 10;
num = num + 1;
num = num + 1;
num = num - 1;
alert(num);
Префиксный и постфиксный тип
На самом деле операции инкремента и декремента
можно записывать двумя способами. Давайте
рассмотрим эти способы на примере ++
,
а для --
все будет аналогично.
В первом способе операция записывается после
имени переменной, вот так: 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);