> For the complete documentation index, see [llms.txt](https://thedvlpr.gitbook.io/javascript-for-dummies/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://thedvlpr.gitbook.io/javascript-for-dummies/operatory.md).

# Операторы

[![Generic badge](https://img.shields.io/badge/JavaScript-%D0%B4%D0%BB%D1%8F%20%D1%82%D1%83%D0%BF%D1%8B%D1%85-green.svg)](https://img.shields.io/badge/JavaScript-%D0%B4%D0%BB%D1%8F%20%D1%82%D1%83%D0%BF%D1%8B%D1%85-green.svg)

![](/files/-M8VqV1sBzbJJQXEA0nF)

Большинство операторов известно нам еще с начальных классов, к примеру:

* `+`
* `-`
* `/`
* `*`
* `=`

Они все используются в **JavaScript**, но есть нюансы.

Нюансы касаются операторов: `+`, `-`, `*`. Они в **JavaScript** умеют немного больше, чем в обычной математике.

#### **Унарный/бинарный плюс** <a href="#toc_1" id="toc_1"></a>

К примеру, с помощью оператора `+` можно складывать не только **числа**, но и **строки**:

```javascript
'a' + 'b'; // получим: 'ab'
'1' + '3'; // получим: '13'  
```

Стоит быть крайне внимательными, когда пытаетесь сложить 2 числа, а точнее, это вы думаете, что там 2 числа, а на самом деле там могут оказаться строки. И всё, приплыли, выдаст ошибку.

Кстати, значения, к которым ты хочешь применить любой оператор, называются `аргументами` или `операндами`.

Чтобы такой чумы не случилось, можно использовать функцию **JavaScript** под названием **Number**, а можно использовать еще одну супер способность оператора `+`: **преобразование к числу**. Это я тоже уже показывал в одном из предыдущих уроков:

```javascript
let a = '45';
let b = +a;  
```

В данном случае, переменная `b` будет иметь значение 45 и тип, внимание – `Number`. **Оператор** `+` **поставленный перед любым значением, будет пытаться преобразовать это значение к типу**`Number`. В данном случае его называют **унарным плюсом**, что означает лишь одно: **плюс применяется только к одному операнду**.&#x20;

Запись такого типа, не должна тебя пугать:

```javascript
console.log(+'1' + +'3'); // получим значение: 4
```

**Здесь происходит следующее**: тот плюс, который стоит непосредственно перед складываемым значением является **унарным**, он имеет больший приоритет для **JavaScript**. Т.е., сначала произойдет преобразование к числам, и только потом отработает **бинарный плюс**.

**Бинарный плюс** – оператор, который применяется уже к 2-м `операндам (аргументам)`.&#x20;

Небольшой пример бинарного плюса:

```javascript
1 + 4;
```

В предыдущем уроке о **циклах**, я упомянул такие термины, как **инкремент** и **декремент.** Разберем эти понятия.

#### **Инкремент** <a href="#toc_2" id="toc_2"></a>

**Инкремент** просто-напросто **увеличивает** текущее значение переменной **на** **единицу**:

```javascript
let a = 3;
a++; 
console.log(a); // получим значение: 4
```

Как видишь, плюсики стоят после переменной. Такая запись инкремента называется **постфиксной формой**. Но есть еще **префиксная форма**.

`Префиксная` форма точно так же, как и `постфиксная`**увеличивает значение на единицу**. Но в чем же тогда разница, спросишь ты? А вот в чем:

```javascript
let a = 5;
console.log(a++); // что выведет?
```

Думаешь, что в консоль выведется значение `6`? А вот и нет, в консоль выведется старое значение `5`. **Значение** в данном случае **увеличивается** **после** того, как ты вызвал инкремент, а не в момент его вызова.&#x20;

А вот `префиксная`работает так, как ты ожидал от `постфиксной`:

```javascript
let a = 5;
console.log(++a); // выведет значение 6
```

`Префиксная` форма меняет значение переменной перед тем, как вывести в консоль и поэтому все работает более логично.

#### **Декремент** <a href="#toc_3" id="toc_3"></a>

**Декремент** уменьшает текущее значение переменной на единицу:

```javascript
let a = 3;
a--; 
console.log(a); // получим значение: 2
```

Декремент тоже имеет `префиксную` и `постфиксную` формы.

**Важное замечание:** инкремент, как и декремент можно использовать только с переменной. Просто к значению его применить нельзя – словите ошибку.

#### **Возведение в степень** <a href="#toc_4" id="toc_4"></a>

**JavaScript** позволяет достаточно просто возвести любое число в любую степень. Для этого используется оператор `**:`

```javascript
2 ** 3; // читать, как "два в третей степени": 8
3 ** 2; // читать, как "три во второй степени": 9
```

#### **Остаток от деления** <a href="#toc_5" id="toc_5"></a>

И еще один полезный оператор – `%`.  Оператор позволяет нам **получить остаток после деления**. Пример:

```javascript
11 % 2; // получим значение: 1
8 % 3; // получим значение: 2
```

**В первом случае**: `11` не делится на `2` без остатка. Максимальное число, которое делится на `2` без остатка в данном примере – это `10`. Получается, что остаток здесь равен единице (`11 - 10`).

**Во втором случае** все ровно так же: Максимальное число, которое делится без остатка в данном случае – это `6`. Вычитая из значения `8` значение `6`, получаем: `2`.

*Именно значение остатка и предоставляет нам этот оператор.*

#### **Домашнее задание** <a href="#toc_6" id="toc_6"></a>

Сегодня совсем байтовое домашнее задание. Весь код я вынес в новый для тебя онлайн-редактор (*Repl.it*). Ещё раз изучи код и попробуй со всем поиграться самостоятельно.

[Ссылка на редактор с кодом](https://repl.it/@JSstupid/operators-1)
