Случайные числа в JavaScript

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

В JavaScript для этого чаще всего используют Math.random().

console.log(Math.random());

Результат каждый раз может быть разным:

0.7312494727189052

Math.random()

Math.random() возвращает случайное дробное число от 0 до 1.

let randomNumber = Math.random();

console.log(randomNumber);

Важный момент: 0 может попасть в результат, а 1 - нет.

То есть результат находится в таком диапазоне:

0 <= число < 1

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

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

Чтобы получить случайное дробное число от min до max, используют такую формулу:

let min = 10;
let max = 20;

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

console.log(randomNumber);

Например, результат может быть таким:

14.6825319140723

Здесь число будет от 10 включительно до 20 не включительно.

Эту формулу удобно вынести в функцию:

function getRandomNumber(min, max) {
  return Math.random() * (max - min) + min;
}

console.log(getRandomNumber(10, 20));

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

Чаще нужно не дробное, а целое случайное число. Например, от 1 до 10.

Для этого результат Math.random() умножают на размер диапазона и округляют вниз через Math.floor().

let randomNumber = Math.floor(Math.random() * 10) + 1;

console.log(randomNumber);

Так можно получить целое число от 1 до 10 включительно.

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

function getRandomInteger(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);

  return Math.floor(Math.random() * (max - min + 1)) + min;
}

console.log(getRandomInteger(1, 10));

min и max здесь включаются в диапазон. То есть функция может вернуть и 1, и 10.

Пример с кубиком

У кубика шесть граней, поэтому нужно получить случайное целое число от 1 до 6.

function rollDice() {
  return Math.floor(Math.random() * 6) + 1;
}

console.log(rollDice());

Результат может быть любым числом от 1 до 6.

Можно использовать уже готовую функцию из прошлого примера:

console.log(getRandomInteger(1, 6));

Случайный элемент массива

Случайные числа часто используют, чтобы выбрать элемент из массива.

let colors = ['red', 'green', 'blue'];

let index = Math.floor(Math.random() * colors.length);

console.log(colors[index]);

Сначала мы получаем случайный индекс от 0 до colors.length - 1, а потом берем элемент массива по этому индексу.

Такой код удобно завернуть в функцию:

function getRandomItem(items) {
  let index = Math.floor(Math.random() * items.length);

  return items[index];
}

let names = ['Анна', 'Олег', 'Мария'];

console.log(getRandomItem(names));

Где не использовать Math.random()

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

Но его не используют для паролей, токенов, ключей и других задач, связанных с безопасностью. Для таких случаев нужны специальные криптографические API.

Итого

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

  • Math.random() дает дробное число от 0 до 1.
  • Math.random() * (max - min) + min дает случайное дробное число в диапазоне.
  • Math.floor() помогает получить целое число.
  • Math.floor(Math.random() * (max - min + 1)) + min дает целое число от min до max включительно.
  • Для выбора случайного элемента массива нужен случайный индекс.