$ sudo teach IT
МОДУЛЬ 2 · УРОК 4

Числа и базовый Math

Числа в JavaScript — не только сложение и вычитание. Разберём арифметические операторы, инкремент и декремент, особые значения Infinity и NaN, а также мощный встроенный объект Math с полезнейшими функциями.

⏱ ~25 минут 🎓 Для новичков ⚡ JavaScript

🔢 Числа в 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 вопросов

Чётность числа

Создайте переменную number со значением 17. Создайте переменную isOdd, которая равна true если number нечётное (используя оператор %).

Случайное число

Создайте переменную randomNum, которая содержит случайное целое число от 1 до 100 включительно. Используйте Math.random и Math.floor.