Префиксен и постфиксен тип в JavaScript

Всъщност операциите инкремент и декремент могат да бъдат записани по два начина. Нека разгледаме тези начини с пример ++, а за -- всичко ще бъде аналогично.

В първия начин операцията се записва след името на променливата, ето така: a++, а във втория начин - преди името на променливата, ето така: ++a.

Първата форма се нарича постфиксна, а втората - префиксна. Нека видим в какви случаи се проявява разликата между тези две форми.

Нека имаме код alert(a++) и код alert(++a).

В случая с alert(a++) променливата първо ще се изведе, а след това ще се увеличи с единица, а в случая с alert(++a) променливата първо ще се увеличи с единица, а след това ще се изведе.

В следващия пример първият alert ще изведе 0, тъй като първо ще се изпълни извеждането на екрана, и едва след това променливата ще се увеличи:

javascriptlet num = 0;
alert(num++); // ще изведе 0
alert(num);   // ще изведе 1

А сега променливата първо ще се увеличи, а едва след това ще се извърши извеждането на екрана:

javascriptlet num = 0;
alert(++num); // ще изведе 1 - променливата се увеличи веднага

Такова поведение е в сила не само за извеждане на екрана, но и за присвояване:

javascriptlet num1 = 0;
let num2 = num1++; // в променливата num2 ще се запише 0
alert(num2); // ще изведе 0
alert(num1); // ще изведе 1 - променливата num1 се промени след записването в num2

А сега нека сменим постфиксната форма с префиксна:

javascriptlet num1 = 0;
let num2 = ++num1; // в променливата num2 ще се запише 1
alert(num2); // ще изведе 1

Ако нашата операция се изпълнява на отделен ред, то няма разлика между префиксната и постфиксната форми:

javascriptlet num = 0;
++num;
num++;
alert(num); // ще изведе 2
Задание 1

Без да пускате кода, определете какво ще се изведе на екрана:

javascriptlet num = 3;
alert(++num);
Задание 2

Без да пускате кода, определете какво ще се изведе на екрана:

javascriptlet num = 3;
alert(num++);
Задание 3

Без да пускате кода, определете какво ще се изведе на екрана:

javascriptlet num = 3;
alert(--num);
Задание 4

Без да пускате кода, определете какво ще се изведе на екрана:

javascriptlet num = 3;
alert(num--);
Задание 5

Без да пускате кода, определете какво ще се изведе на екрана:

javascriptlet num1 = 3;
let num2 = ++num1;
alert(num1);
alert(num2);
Задание 6

Без да пускате кода, определете какво ще се изведе на екрана:

javascriptlet num1 = 3;
let num2 = num1++;
alert(num1);
alert(num2);
Задание 7

Без да пускате кода, определете какво ще се изведе на екрана:

javascriptlet num1 = 3;
let num2 = --num1;
alert(num1);
alert(num2);
Задание 8

Без да пускате кода, определете какво ще се изведе на екрана:

javascriptlet num1 = 3;
let num2 = num1--;
alert(num1);
alert(num2);
Задание 9

Без да пускате кода, определете какво ще се изведе на екрана:

javascriptlet num1 = 3;
num1++;
let num2 = num1--;
alert(num1++);
alert(--num2);