# Операторы

[![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)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://thedvlpr.gitbook.io/javascript-for-dummies/operatory.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
