Когда Яндекс.Такси рассчитывает стоимость поездки — умножает тариф на километры, прибавляет платную дорогу, делит на промокод. Когда Steam показывает "Ещё 200 монет до скидки" — вычитает текущий баланс из нужной суммы. Это всё операторы в действии.
Операторы работают с переменными и значениями разных типов. Результаты вычислений используются в условиях и передаются в функции.
| Оператор | Значение | Пример |
|----------|----------|--------|
| + | Сложение (или конкатенация) | 5 + 3 = 8 |
| - | Вычитание | 10 - 4 = 6 |
| * | Умножение | 6 * 7 = 42 |
| / | Деление | 15 / 4 = 3.75 |
| % | Остаток от деления | 17 % 5 = 2 |
| ** | Возведение в степень | 2 ** 8 = 256 |
% (modulo) не только "остаток", но и мощный инструмент:
// Проверить чётность
n % 2 === 0 // чётное
n % 2 !== 0 // нечётное
// Циклический сдвиг по массиву (бесконечная карусель)
const index = (current + 1) % slides.length
// Проверить делимость
n % 3 === 0 // делится на 3 без остаткаlet price = 1000
price += 200 // price = price + 200 = 1200
price -= 100 // price = 1100
price *= 1.2 // price = 1320 (НДС 20%)
price /= 2 // price = 660
price **= 2 // price = 435600
// Инкремент и декремент
let count = 5
count++ // count = 6 (постфиксный: сначала использует, потом увеличивает)
++count // count = 7 (префиксный: сначала увеличивает, потом использует)
count-- // count = 6Оператор + перегружен: он умеет и складывать числа, и склеивать строки. Если один из операндов — строка, + работает как конкатенация:
1 + 2 // 3 — числа
'1' + 2 // '12' — строка + число = строка
1 + '2' // '12' — то же
1 + 2 + '3' // '33' — 1+2=3, потом 3+'3'='33'
'1' + 2 + 3 // '123' — '1'+'2'='12', потом '12'+'3'='123'-, *, / всегда работают с числами — неявно преобразовывают строки.
Ошибка 1: Деление целых чисел даёт дробь
const perPage = 10
const total = 23
const pages = total / perPage // 2.3 — не 2!
// Правильно: Math.ceil для округления вверх (страниц)
const pages = Math.ceil(total / perPage) // 3 страницыОшибка 2: NaN распространяется по всему выражению
const price = Number('abc') // NaN — не число
const total = price * 2 + 100 // NaN — всё выражение становится NaN
// Правильно: проверять входные данные
if (isNaN(price)) console.log('Введите корректную цену')Ошибка 3: Точность чисел с плавающей точкой
0.1 + 0.2 // 0.30000000000000004 — не 0.3!
// Для денег используй Math.round или умножай на 100:
Math.round((0.1 + 0.2) * 100) / 100 // 0.3
// Или в рублях/копейках: работай с целыми числами (копейки)Оператор % используется для пагинации, карусельных слайдеров, поочерёдного распределения задач. Округление через Math.round, Math.ceil, Math.floor — в любом расчёте цен. Работа с деньгами в копейках (целых числах) — стандарт во избежание ошибок точности.
Расчёт стоимости заказа с НДС и скидкой
const itemPrice = 1500 // цена за единицу (в рублях)
const quantity = 3
const discountPct = 15 // скидка 15%
const vatRate = 0.2 // НДС 20%
// Расчёт шаг за шагом
const subtotal = itemPrice * quantity // 4500
const discountAmount = subtotal * discountPct / 100 // 675
const afterDiscount = subtotal - discountAmount // 3825
const vat = afterDiscount * vatRate // 765
const total = afterDiscount + vat // 4590
console.log('Сумма:', subtotal) // 4500
console.log('Скидка:', discountAmount) // 675
console.log('НДС:', Math.round(vat)) // 765
console.log('Итого с НДС:', Math.round(total)) // 4590
// % — проверяем номер заказа
const orderId = 10042
console.log(orderId % 2 === 0 ? 'Чётный заказ' : 'Нечётный заказ')
// Пагинация: номер страницы для элемента с индексом i
const itemsPerPage = 10
const itemIndex = 47
const pageNumber = Math.floor(itemIndex / itemsPerPage) + 1
console.log('Страница:', pageNumber) // 5Когда Яндекс.Такси рассчитывает стоимость поездки — умножает тариф на километры, прибавляет платную дорогу, делит на промокод. Когда Steam показывает "Ещё 200 монет до скидки" — вычитает текущий баланс из нужной суммы. Это всё операторы в действии.
Операторы работают с переменными и значениями разных типов. Результаты вычислений используются в условиях и передаются в функции.
| Оператор | Значение | Пример |
|----------|----------|--------|
| + | Сложение (или конкатенация) | 5 + 3 = 8 |
| - | Вычитание | 10 - 4 = 6 |
| * | Умножение | 6 * 7 = 42 |
| / | Деление | 15 / 4 = 3.75 |
| % | Остаток от деления | 17 % 5 = 2 |
| ** | Возведение в степень | 2 ** 8 = 256 |
% (modulo) не только "остаток", но и мощный инструмент:
// Проверить чётность
n % 2 === 0 // чётное
n % 2 !== 0 // нечётное
// Циклический сдвиг по массиву (бесконечная карусель)
const index = (current + 1) % slides.length
// Проверить делимость
n % 3 === 0 // делится на 3 без остаткаlet price = 1000
price += 200 // price = price + 200 = 1200
price -= 100 // price = 1100
price *= 1.2 // price = 1320 (НДС 20%)
price /= 2 // price = 660
price **= 2 // price = 435600
// Инкремент и декремент
let count = 5
count++ // count = 6 (постфиксный: сначала использует, потом увеличивает)
++count // count = 7 (префиксный: сначала увеличивает, потом использует)
count-- // count = 6Оператор + перегружен: он умеет и складывать числа, и склеивать строки. Если один из операндов — строка, + работает как конкатенация:
1 + 2 // 3 — числа
'1' + 2 // '12' — строка + число = строка
1 + '2' // '12' — то же
1 + 2 + '3' // '33' — 1+2=3, потом 3+'3'='33'
'1' + 2 + 3 // '123' — '1'+'2'='12', потом '12'+'3'='123'-, *, / всегда работают с числами — неявно преобразовывают строки.
Ошибка 1: Деление целых чисел даёт дробь
const perPage = 10
const total = 23
const pages = total / perPage // 2.3 — не 2!
// Правильно: Math.ceil для округления вверх (страниц)
const pages = Math.ceil(total / perPage) // 3 страницыОшибка 2: NaN распространяется по всему выражению
const price = Number('abc') // NaN — не число
const total = price * 2 + 100 // NaN — всё выражение становится NaN
// Правильно: проверять входные данные
if (isNaN(price)) console.log('Введите корректную цену')Ошибка 3: Точность чисел с плавающей точкой
0.1 + 0.2 // 0.30000000000000004 — не 0.3!
// Для денег используй Math.round или умножай на 100:
Math.round((0.1 + 0.2) * 100) / 100 // 0.3
// Или в рублях/копейках: работай с целыми числами (копейки)Оператор % используется для пагинации, карусельных слайдеров, поочерёдного распределения задач. Округление через Math.round, Math.ceil, Math.floor — в любом расчёте цен. Работа с деньгами в копейках (целых числах) — стандарт во избежание ошибок точности.
Расчёт стоимости заказа с НДС и скидкой
const itemPrice = 1500 // цена за единицу (в рублях)
const quantity = 3
const discountPct = 15 // скидка 15%
const vatRate = 0.2 // НДС 20%
// Расчёт шаг за шагом
const subtotal = itemPrice * quantity // 4500
const discountAmount = subtotal * discountPct / 100 // 675
const afterDiscount = subtotal - discountAmount // 3825
const vat = afterDiscount * vatRate // 765
const total = afterDiscount + vat // 4590
console.log('Сумма:', subtotal) // 4500
console.log('Скидка:', discountAmount) // 675
console.log('НДС:', Math.round(vat)) // 765
console.log('Итого с НДС:', Math.round(total)) // 4590
// % — проверяем номер заказа
const orderId = 10042
console.log(orderId % 2 === 0 ? 'Чётный заказ' : 'Нечётный заказ')
// Пагинация: номер страницы для элемента с индексом i
const itemsPerPage = 10
const itemIndex = 47
const pageNumber = Math.floor(itemIndex / itemsPerPage) + 1
console.log('Страница:', pageNumber) // 5Ты разрабатываешь калькулятор чаевых для ресторанного приложения. Функция calcTip считает рекомендуемые чаевые: 15% для обычного счёта. Если счёт больше 5000 — дополнительная скидка 5% на чаевые (т.е. 15% * 0.95).
Скидка 5% означает оставить 95% — умножай на 0.95