Learn JavaScript

Math.random() - метод для генерации случайного числа в JavaScript

Math.random() возвращает псевдослучайное число от 0 до 1, не включая 1.

Проще всего запомнить так: метод даёт дробное число в диапазоне 0 <= x < 1.

Синтаксис

Math.random()

У метода нет аргументов.

Что делает Math.random()

Math.random() генерирует новое псевдослучайное дробное число при каждом вызове.

const value = Math.random();

console.log(value); // например: 0.374918271...

Точное число заранее неизвестно, поэтому результат при каждом запуске обычно разный.

Что возвращает Math.random()

Math.random() возвращает число типа number.

const result = Math.random();

console.log(typeof result); // "number"

Это именно число, а не строка.

Какой у него диапазон

Результат всегда:

  • больше или равен 0
  • меньше 1
const value = Math.random();

console.log(value >= 0); // true
console.log(value < 1);  // true

Это важный момент: 1 метод не возвращает.

0 теоретически возможен, но на практике встречается крайне редко.

Число от 0 до 10

Если умножить результат на 10, диапазон сдвинется.

const value = Math.random() * 10;

console.log(value); // например: 7.3821...

Теперь число будет в диапазоне от 0 до 10, но 10 тоже не включается.

То есть это по-прежнему дробное значение:

const value = Math.random() * 10;

console.log(value >= 0);  // true
console.log(value < 10);  // true

Случайное целое от 0 до 9

Очень частый сценарий - получить случайное целое число.

Для этого Math.random() обычно используют вместе с Math.floor().

const randomIndex = Math.floor(Math.random() * 10);

console.log(randomIndex); // число от 0 до 9

Здесь всё работает так:

  • Math.random() даёт число от 0 до 1
  • умножение на 10 даёт диапазон от 0 до 10
  • Math.floor() убирает дробную часть

В итоге получаются целые числа от 0 до 9.

Случайное целое в диапазоне от min до max

Если нужен свой диапазон, используют такую формулу:

const randomNumber = Math.floor(Math.random() * (max - min + 1)) + min;

Пример для диапазона от 5 до 10:

const min = 5;
const max = 10;

const randomNumber = Math.floor(Math.random() * (max - min + 1)) + min;

console.log(randomNumber); // число от 5 до 10

Именно эта запись обычно нужна, когда верхняя граница тоже должна включаться.

Случайное дробное число в диапазоне

Для дробных чисел формула проще:

const randomNumber = Math.random() * (max - min) + min;

Например:

const min = 2;
const max = 5;

const randomNumber = Math.random() * (max - min) + min;

console.log(randomNumber); // число от 2 до 5, не включая 5

Math.random() и Math.floor()

Это самая частая связка.

console.log(Math.floor(Math.random() * 6) + 1); // число от 1 до 6

Так часто имитируют бросок кубика.

  • Math.random() даёт случайное дробное число
  • Math.floor() превращает его в целое

Если нужны случайные целые, обычно нужен именно такой подход.

Почему не используют Math.round()

Новички часто пишут так:

Math.round(Math.random() * 10)

На первый взгляд кажется, что это даст целое число от 0 до 10, но распределение будет неравномерным.

Крайние значения вроде 0 и 10 будут выпадать реже, чем остальные.

Поэтому для случайных целых чисел обычно используют именно Math.floor(), а не Math.round().

Каждый вызов новый, но повторы возможны

Math.random() вызывается каждый раз заново.

console.log(Math.random()); // например: 0.12...
console.log(Math.random()); // например: 0.87...

Обычно числа будут разными, но это не значит, что повторы невозможны.

Метод не гарантирует уникальность значений.

Math.random() и безопасность

Math.random() подходит для обычных задач интерфейса и логики, но не для безопасности.

Его не используют для:

  • паролей
  • токенов
  • кодов подтверждения
  • криптографически важных значений

Для таких задач в браузере используют crypto.getRandomValues().

Когда это полезно

Math.random() удобно использовать, когда:

  • нужно выбрать случайный элемент
  • нужно получить случайный индекс массива
  • нужно имитировать кубик, лотерею или случайное событие
  • нужно сгенерировать число в диапазоне

Пример:

const items = ["red", "green", "blue"];
const randomIndex = Math.floor(Math.random() * items.length);

console.log(items[randomIndex]);

Частые ошибки

Писать Math.random(1, 10)

console.log(Math.random(1, 10));

У Math.random() нет параметров, поэтому такой вызов не задаёт диапазон.

Использовать Math.round() для случайных целых

Math.round(Math.random() * 10)

Такой вариант даёт неравномерный результат.

Обычно правильнее использовать Math.floor().

Ожидать, что может выпасть 1

const value = Math.random();

console.log(value < 1); // true

Верхняя граница у метода не включается.

Думать, что числа не будут повторяться

console.log(Math.random());
console.log(Math.random());

Результаты часто разные, но совпадения тоже возможны.

Быстрая памятка

  • Math.random() возвращает псевдослучайное число
  • результат всегда находится в диапазоне 0 <= x < 1
  • метод возвращает number
  • 1 не входит в диапазон
  • для случайных целых чисел обычно используют Math.floor(Math.random() * n)
  • для безопасности Math.random() не подходит

Коротко

Math.random() - это стандартный способ получить псевдослучайное число в JavaScript. Главное, что стоит запомнить: метод возвращает дробное число от 0 до 1, а для случайных целых его обычно комбинируют с Math.floor().