Операции инкремента и декремента в JavaScript

Рассмотрим следующий код:

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);