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().