Клавиша / esc

Math.random()

Генерирует случайные числа от 0 до 1.

Время чтения: меньше 5 мин

Кратко

Скопировано

Одна из самых часто используемых функции объекта Math. Возвращает случайное число в диапазоне от 0 до 1, не включая 1.

Как пишется

Скопировано
        
          
          const value = Math.random()console.log(value)// Выведет случайное число
          const value = Math.random()

console.log(value)
// Выведет случайное число

        
        
          
        
      
Открыть демо в новой вкладке

Детали реализации

Скопировано

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

На самом деле, функция не генерирует случайное число. Это лишь иллюзия. За генерацию подобных чисел отвечают специальные алгоритмы, которые относятся к категории PRNG — pseudorandom number generator, их также называют генераторами псевдослучайных чисел.

Генератор псевдослучайных чисел (ГПСЧ) — метод генерации чисел арифметическим способом.

Любой PRNG-алгоритм генерирует числа, которые, в конечном счёте, будут повторяться. Поэтому числа, генерируемые Math.random(), можно предугадать.

Но какой алгоритм используется для нашей функции, их же много?

Разработчики браузерных движков сами определяют, какой алгоритм будет применяться в их среде. Но начиная с 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
// От минимума до максимума, не включая максимум

        
        
          
        
      
Открыть демо в новой вкладке

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

Открыть демо в новой вкладке