Math.random() JS — случайное число
Сегодня мы рассмотрим метод объeкта Math для получения рандомного числа. Данный метод возвращает случайное число в диапазоне от 0 до 1 (не включая 1). При необходимости мы можем масштабировать диапазон.
Math.random()
Тут не будет описания каких-либо параметров.
Давайте рассмотрим простой способ получения случайного числа:
Данный код выдаст нам целое случайное число в диапазоне с 0 — 9. Целое потому что мы используем округление числа, можете подробнее почитать тут.
Чтобы иметь возможность задавать максимальное число для округления, мы можем написать функцию:
Случайный элемент массива
Также мы можем применить данную функцию для получения случайного элемента массива:
Случайное число из заданного диапазона
Чтобы получить случайное целое число в указанном диапазоне мы можем немного изменить нашу функцию:
Генерируем случайные числа в JavaScript

При программировании на языке JavaScript (JS) нередко нужно выполнить такую операцию, как генерация случайных чисел. Это может понадобиться, когда в программу нужно привнести элемент случайности, причем не важно, о каком направлении разработки идет речь, будь то web-разработка, мобильная разработка или создание обычных десктопных приложений.
Где конкретно востребована генерация:
- в анимации;
- при создании рандомной компьютерной музыки;
- в процедуральном искусстве;
- для вывода случайного изображения;
- для рандомного выбора слов из списка, который создан заранее;
- для создания API-ключей;
- для вывода фрагментов текста;
- при генерации паролей, случайных чисел и т. д.
В реальности существуют разные способы генерации, выбор которых зависит от конкретного программного приложения. О них — наша статья.
Базовая генерация в JS
Наиболее простой способ получить random-число — это хорошо известный метод Math.random(), который встроен в JavaScript.
На практике метод Math.random() всегда осуществляет возврат числа с плавающей точкой в диапазоне между 0 и 1. Технически, это число может быть и нулем, однако оно точно никогда не будет равно 1.
Так как метод очень популярен в использовании, его нередко помещают внутрь функции:
Основной недостаток вышесказанного — функция будет создавать рандомное значение лишь в пределах весьма ограниченного диапазона. Но это не значит, что других путей генерации не существует.
Генерация между числами: максимальные и минимальные значения (max, min)
Для добавления данной функциональности без математики не обойтись.

Также никто не мешает сгенерировать рандомное целое число в диапазоне, включая максимальное и минимальное.

Подбрасываем монету (true либо false)
Иногда нужно просто получить орел или решку, то есть, по сути, 0 либо 1. Для этого пригодится простой код:
Если же надо получить конкретно true либо false, то код следует немного изменить:
Также можно ассоциировать нужные слова со сторонами монеты, то есть вспоминаем пресловутые орел или решка (heads or tails).
Пример генерации с исключениями
Этот метод работает для ограниченного диапазона целых чисел. Создается массив (array) числовых значений, которые интересуют, далее осуществляется выборка.
Можно все это сделать более динамичным, добавив массив с целыми числами, которые надо исключить, а также пустой массив с результатом фильтрации 1-го во 2-ой.

- создать цикл по массиву numPool;
- выполнить проверку, существует ли случайное число в нашем массиве исключений excludePool;
- поместить результат в массив filteredPool.
По итогу отобразится случайное число из массива, который был отфильтрован.

Генерируем случайное и неповторяющееся число
Когда речь идет о небольших наборах чисел, можно поступить следующим образом:
- создаем array, заполненный элементами;
- тасуем эти элементы рандомным образом;
- помещаем результаты в новый массив;
- извлекаем перетасованные элементы 1 раз:
Если же мы говорим о больших числовых наборах, то тут надо после создания заполнять array случайными целыми числами, причем следует отклонять любое число, которое раньше уже было сгенерировано:

В вышеописанном коде numReserve заполнен двенадцатью рандомными значениями в диапазоне от 0 до 1000. Числа потом можно получить из массива.
Пару слов о криптографии
Выше мы показали ряд методов, однако их будет недостаточно, если идет разговор о создании функций с криптографической защитой. Для этих целей можно задействовать Web Cryptography API и создать типизированный array:

То есть мы создаем массив, где есть восемь слотов, причем каждый из них способен содержать 16-битное беззнаковое целое число. Можно выбрать и другие варианты:
- int16Array,
- Int8Array,
- Uint8Array,
- Int32Array,
- Uint32Array.
Теперь мы можем заполнить array рандомными числами конкретного типа:

Пример выборки следующий:

У Web Cryptography API — хорошая поддержка в современных веб-браузерах, хотя иногда нужно использовать префиксы.
Хотите получить более глубокие знания по JavaScritpt? Обратите внимание на курсы по JS в Otus!