Кратко
СкопированоОдна из самых часто используемых функции объекта Math
. Возвращает случайное число в диапазоне от 0
до 1
, не включая 1
.
Как пишется
Скопированоconst value = Math.random()console.log(value)// Выведет случайное число
const value = Math.random() console.log(value) // Выведет случайное число
Детали реализации
СкопированоДавайте заглянем под капот Math
, и узнаем, как же в действительности происходит формирование случайного числа.
На самом деле, функция не генерирует случайное число. Это лишь иллюзия. За генерацию подобных чисел отвечают специальные алгоритмы, которые относятся к категории PRNG — pseudorandom number generator, их также называют генераторами псевдослучайных чисел.
Генератор псевдослучайных чисел (ГПСЧ) — метод генерации чисел арифметическим способом.
Любой PRNG-алгоритм генерирует числа, которые, в конечном счёте, будут повторяться. Поэтому числа, генерируемые Math
, можно предугадать.
Но какой алгоритм используется для нашей функции, их же много?
Разработчики браузерных движков сами определяют, какой алгоритм будет применяться в их среде. Но начиная с 2015 года, большинством используется xorshift128+. В этот список входят: Firefox, Safari и браузеры, использующие движок V8 (Chromium-подобные браузеры).
На практике
Скопированосоветует Скопировано
🛠 Не используйте генерацию числа в критичных местах, например, для ключа доступа. В этом случае лучше использовать Web Cryptography API. Он работает медленнее, но криптографически устойчив.
window.crypto.getRandomValues(new Uint32Array(1))[0]// Вернёт случайное число от 0 до 2^32
window.crypto.getRandomValues(new Uint32Array(1))[0] // Вернёт случайное число от 0 до 2^32
🛠 Используется, когда нужно сгенерировать случайное число в заданном диапазоне. Функция возвращает число от 0 до 1, но диапазон можно расширить с помощью формулы:
Math.floor(Math.random() * (max - min)) + min// От минимума до максимума, не включая максимум
Math.floor(Math.random() * (max - min)) + min // От минимума до максимума, не включая максимум
🛠 Используется для выбора случайного элемента из массива. Например, вы хотите отобразить случайный товар дня из списка или показать пользователю несколько элементов из его коллекции любимых песен.