Learning Book

Арифметические и строковые операторы

Арифметические и строковые операторы

Основные арифметические операторы

10 + 3   // 13 — сложение
10 - 3   // 7  — вычитание
10 * 3   // 30 — умножение
10 / 3   // 3.3333... — деление (всегда float)
10 % 3   // 1  — остаток от деления (modulo)
10 ** 3  // 1000 — возведение в степень (ES2016)

Оператор + и конкатенация строк

+ — единственный арифметический оператор, который работает со строками:

// Если один операнд — строка, происходит конкатенация
'Hello' + ' ' + 'World'  // 'Hello World'
'Цена: ' + 42            // 'Цена: 42' — число → строка
1 + 2 + '3'              // '33' — слева направо: 3, затем '33'
'1' + 2 + 3              // '123' — слева направо: '12', затем '123'
Порядок выполнения + имеет значение! 1 + 2 + '3' === '33', но '3' + 1 + 2 === '312'.

Остаток от деления %

Очень полезен для проверки чётности, циклических индексов и т.д.:

// Проверка чётности
5 % 2   // 1 — нечётное
4 % 2   // 0 — чётное

// Циклический индекс (оборот круга)
const colors = ['red', 'green', 'blue'];
colors[7 % 3]  // colors[1] = 'green'

// Часы: 25:00 → 1:00
25 % 24  // 1

Приоритет операторов

JavaScript выполняет операторы в порядке их приоритета (как в математике):

2 + 3 * 4      // 14, не 20 — * выполняется раньше +
(2 + 3) * 4    // 20 — скобки меняют порядок
2 ** 3 ** 2    // 512 — ** правоассоциативен: 2 ** (3 ** 2) = 2 ** 9

Унарные операторы

-5         // отрицание
+true      // 1 — принудительное приведение к числу
+'42'      // 42
+''        // 0
typeof x   // строка с типом
void 0     // undefined

Инкремент и декремент

let n = 5;
n++   // постфиксный: возвращает 5, потом n = 6
++n   // префиксный: n = 7, возвращает 7
n--   // постфиксный: возвращает 7, потом n = 6
--n   // префиксный: n = 5, возвращает 5

В отличие от многих языков (Java, C), в JavaScript нет целочисленного деления. 7 / 2 === 3.5, а не 3.

Если нужно целочисленное деление, используйте Math.floor(), Math.trunc() или Math.ceil():

Math.floor(7 / 2)   // 3 — округление вниз
Math.trunc(7 / 2)   // 3 — усечение дробной части
Math.ceil(7 / 2)    // 4 — округление вверх

// Для отрицательных чисел разница:
Math.floor(-7 / 2)  // -4
Math.trunc(-7 / 2)  // -3