Числа и базовый Math
Числа в JavaScript — не только сложение и вычитание. Разберём арифметические операторы, инкремент и декремент, особые значения Infinity и NaN, а также мощный встроенный объект Math с полезнейшими функциями.
🔢 Числа в JavaScript — всё float
В большинстве языков программирования числа делятся на два типа: целые (int) и дробные (float). В JavaScript всё проще и одновременно коварнее: все числа хранятся как 64-битные числа с плавающей точкой по стандарту IEEE 754. Это значит, что 1 и 1.0 — одно и то же.
let a = 42; // выглядит как целое
let b = 42.0; // то же самое!
let c = 3.14; // дробное
let d = -100; // отрицательное
let e = 1_000_000; // миллион (знак _ для читаемости, это не ошибка)
console.log(a === b); // true — они равны!
console.log(typeof a); // "number"
console.log(typeof c); // "number" — один тип для всех!
⚠️ Знаменитый баг: 0.1 + 0.2 в JavaScript не равно 0.3! Результат: 0.30000000000000004. Это не баг JavaScript конкретно — это особенность хранения дробных чисел в двоичной системе. Для работы с деньгами используйте целые числа (копейки/центы) или специальные библиотеки.
➕ Арифметические операторы
JavaScript поддерживает все стандартные математические операции и ещё несколько специальных:
| Оператор | Название | Пример | Результат |
|---|---|---|---|
+ |
Сложение | 5 + 3 |
8 |
- |
Вычитание | 10 - 4 |
6 |
* |
Умножение | 4 * 3 |
12 |
/ |
Деление | 15 / 4 |
3.75 |
% |
Остаток от деления | 15 % 4 |
3 |
** |
Возведение в степень | 2 ** 10 |
1024 |
console.log(10 + 3); // 13
console.log(10 - 3); // 7
console.log(10 * 3); // 30
console.log(10 / 3); // 3.3333... (не целое!)
console.log(10 % 3); // 1 (остаток от деления 10 на 3)
console.log(2 ** 8); // 256 (2 в степени 8)
// Операторы присваивания (сокращённая запись):
let x = 10;
x += 5; // x = x + 5 → 15
x -= 3; // x = x - 3 → 12
x *= 2; // x = x * 2 → 24
x /= 4; // x = x / 4 → 6
x %= 4; // x = x % 4 → 2
console.log(x); // 2
💡 Оператор % (остаток от деления) очень полезен на практике: проверить чётность числа (n % 2 === 0), обернуть индекс по кругу (i % length), получить последнюю цифру числа (n % 10).
⬆️ Инкремент и декремент: ++ и --
Инкремент (++) увеличивает значение на 1. Декремент (--) уменьшает на 1. Это очень частые операции в программировании — счётчики, индексы цикла, подсчёт очков.
let count = 0;
count++; // то же что count = count + 1
console.log(count); // 1
count++;
count++;
console.log(count); // 3
count--; // то же что count = count - 1
console.log(count); // 2
Есть важный нюанс: оператор можно поставить до или после переменной, и это влияет на результат выражения:
let a = 5;
let b = 5;
// Постфиксный: сначала возвращает, потом увеличивает
console.log(a++); // 5 (вернул текущее значение 5)
console.log(a); // 6 (теперь стало 6)
// Префиксный: сначала увеличивает, потом возвращает
console.log(++b); // 6 (сначала увеличил до 6, потом вернул)
console.log(b); // 6
💡 Совет: в большинстве случаев вам всё равно, префиксный или постфиксный — просто используйте count++ на отдельной строке. Разница заметна только когда вы используете результат этого выражения.
🌌 Особые числовые значения: Infinity и NaN
Infinity
Бесконечность. Появляется при делении на ноль (в JS это не ошибка!), а также существует как константа Infinity. Есть и отрицательная: -Infinity.
console.log(1 / 0); // Infinity
console.log(-1 / 0); // -Infinity
console.log(Infinity + 1); // Infinity
console.log(Infinity > 1000000); // true
NaN — Not a Number
«Не число» — результат некорректной математической операции. Интересный факт: NaN не равен самому себе! Для проверки используйте Number.isNaN().
console.log("abc" * 2); // NaN
console.log(0 / 0); // NaN
console.log(NaN === NaN); // false (!) — NaN уникален
console.log(Number.isNaN(NaN)); // true
📐 Объект Math
Math — встроенный объект JavaScript с математическими константами и функциями. Его не нужно подключать — он всегда доступен. Это не класс, а просто набор готовых инструментов.
Округление: round, floor, ceil
// Math.round() — стандартное округление (до 0.5 — вниз, от 0.5 — вверх):
console.log(Math.round(4.3)); // 4
console.log(Math.round(4.7)); // 5
console.log(Math.round(4.5)); // 5
// Math.floor() — округление ВНИЗ (всегда к меньшему целому):
console.log(Math.floor(4.9)); // 4
console.log(Math.floor(-4.1)); // -5 (вниз значит меньше!)
// Math.ceil() — округление ВВЕРХ (всегда к большему целому):
console.log(Math.ceil(4.1)); // 5
console.log(Math.ceil(-4.9)); // -4 (вверх значит больше!)
abs, max, min
// Math.abs() — модуль числа (абсолютное значение, без знака):
console.log(Math.abs(-5)); // 5
console.log(Math.abs(5)); // 5
console.log(Math.abs(-3.7)); // 3.7
// Math.max() — максимальное из переданных чисел:
console.log(Math.max(3, 7, 2, 9, 1)); // 9
// Math.min() — минимальное из переданных чисел:
console.log(Math.min(3, 7, 2, 9, 1)); // 1
// Практический пример — ограничить значение в диапазоне:
let volume = 150;
let safeVolume = Math.min(Math.max(volume, 0), 100);
console.log(safeVolume); // 100 (не даём выйти за пределы 0–100)
sqrt и pow
// Math.sqrt() — квадратный корень:
console.log(Math.sqrt(9)); // 3
console.log(Math.sqrt(2)); // 1.4142... (иррациональное число)
console.log(Math.sqrt(-1)); // NaN (корень из отрицательного числа)
// Math.pow(base, exp) — степень (то же что **):
console.log(Math.pow(2, 10)); // 1024
console.log(Math.pow(3, 3)); // 27
🎲 Math.random() — случайные числа
Math.random() возвращает случайное число от 0 (включительно) до 1 (не включая). Каждый вызов даёт разное число. Это базовый строительный блок для любой случайности в JavaScript.
console.log(Math.random()); // 0.7234... (каждый раз другое)
console.log(Math.random()); // 0.1891...
// Случайное целое число от 0 до N-1:
function randomInt(max) {
return Math.floor(Math.random() * max);
}
console.log(randomInt(6)); // 0, 1, 2, 3, 4 или 5 — как кубик!
// Случайное целое число от min до max включительно:
function randomRange(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
console.log(randomRange(1, 100)); // число от 1 до 100
Математические константы
console.log(Math.PI); // 3.14159... — число Пи
console.log(Math.E); // 2.71828... — число Эйлера
console.log(Math.SQRT2); // 1.41421... — квадратный корень из 2
✅ Итоги урока
- Все числа в JS — 64-битные float. Нет разделения на int и float
- Операторы:
+,-,*,/,%(остаток),**(степень) - Сокращённое присваивание:
x += 5,x -= 3,x *= 2,x /= 4 - Инкремент
++и декремент--— увеличить/уменьшить на 1 Infinity— бесконечность (например, 1/0).NaN— не число (результат ошибочной операции)Math.round/floor/ceil()— три вида округленияMath.abs()— модуль.Math.max/min()— максимум/минимумMath.sqrt()— квадратный корень.Math.random()— случайное число от 0 до 1
В следующем уроке изучим преобразование типов: явное и неявное — важнейшая тема для понимания JavaScript. 🚀
Тест: Числа и Math
6 вопросов