- Math . random ( )
- Как пишется
- Детали реализации
- На практике
- Николай Лопин советует
- Math.random()
- Синтаксис
- Особенности генерации случайных чисел
- Случайное число в диапазоне
- Целое число в диапазоне
- Случайное число в диапазоне включительно max
- Итого
- Math.random()
- Интерактивный пример
- Синтаксис
- Возвращаемое значение
- Примеры
- Получение случайного числа от 0 (включительно) до 1 (не включая)
- Получение случайного числа в заданном интервале
- Получение случайного целого числа в заданном интервале
- Получение случайного целого числа в заданном интервале, включительно
- Спецификации
- Совместимость с браузерами
- Found a content problem with this page?
Math . random ( )
Одна из самых часто используемых функции объекта 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 ( ) , можно предугадать.
Если ваша задача не подразумевает работу с криптографией (например, вычисление кодов аутентичности) — вам будет достаточно псевдослучайных чисел. Но если такая потребность всё же есть — используйте crypto . get Random Values ( ) вместо 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 // от минимума до максимума, не включая максимум
🛠 Используется для выбора случайного элемента из массива. Например, вы хотите отобразить случайный товар дня из списка или же показать пользователю несколько элементов из его коллекции любимых песен.
Math.random()
Math.random() — это функция встроенного объекта Math , которая возвращает псевдослучайное число с плавающей запятой из диапазона от 0 включительно, до 1 не включительно.
Синтаксис
Опубликуем результат в console.
let randomNumber = Math.random() console.log(randomNumber) // или просто console.log(Math.random())
Особенности генерации случайных чисел
1. Math.random() генерирует случайные числа на основе алгоритма, который в итоге можно просчитать, поэтому метод не подходит там, где речь идет о безопасности.
2. Разработчик или пользователь не может выбрать алгоритм, который будет использовать метод для генерации рандомного числа.
3. Math.random() формирует числа похожие на 0.6592126750964376 или 0.4571938784553331. В дальнейшем результат масштабируются до нужного формата и диапазона.
4. Результатом метода может быть ноль, но единица никогда.
5. В сферах связанных с безопасностью рекомендуется использовать Web Cryptography API и его методы getRandomValues() и generateKey() .
Случайное число в диапазоне
Для того, чтобы получить случайное число в заданном интервале можно использовать следующую функцию.
function getRandomNumber(min, max)
Целое число в диапазоне
Получаем целое число от минимума (включительно) до максимума (не включительно)
function getRandomNumber(min, max)
function getRandomNumber(min, max)
ceil() — округляет в большую сторону, floor() в меньшую.
Случайное число в диапазоне включительно max
Функция учитывает недостатки предыдущих решений и выводит случайные числа от и до включительно для обоих случаев.
function getRandomNumber(min, max)
function getRandomNumber(min, max)
function getRandomNumber(min, max)
round() — округляет до ближайшего целого.
Итого
Math.random() генерирует псевдослучайное число от 0 до 1 (не включительно). Метод не содержит параметров, а его результаты удобно форматировать, тем самым получая случайные целые или дробные числа в необходимом диапазоне.
Skypro — научим с нуля
Math.random()
Метод Math.random() возвращает псевдослучайное число с плавающей запятой из диапазона [0, 1) , то есть, от 0 (включительно) до 1 (но не включая 1), которое затем можно отмасштабировать до нужного диапазона. Реализация сама выбирает начальное зерно для алгоритма генерации случайных чисел; оно не может быть выбрано или сброшено пользователем.
Интерактивный пример
Примечание: метод Math.random() не предоставляет криптографически стойкие случайные числа. Не используйте его ни для чего, связанного с безопасностью. Вместо него используйте Web Crypto API (API криптографии в вебе) и более точный метод window.crypto.getRandomValues() .
Синтаксис
Возвращаемое значение
Псевдослучайное число с плавающей запятой от 0 (включительно) до 1 (не считая).
Примеры
Обратите внимание, что поскольку числа в JavaScript являются числами с плавающей запятой стандарта IEEE 754 с поведением при округлении к ближайшему чётному, все эти диапазоны (исключая диапазон с простым вызовом Math.random() ), не точны. Если заданы очень большие границы (253 или выше), возможен крайне редкий случай вычисления обычно исключённой верхней границы.
Получение случайного числа от 0 (включительно) до 1 (не включая)
function getRandom() return Math.random(); >
Получение случайного числа в заданном интервале
Этот пример возвращает случайное число в заданном интервале. Возвращаемое значение не менее (и может быть равно) min и не более (и не равно) max .
function getRandomArbitrary(min, max) return Math.random() * (max - min) + min; >
Получение случайного целого числа в заданном интервале
Этот пример возвращает случайное целое число в заданном интервале. Возвращаемое значение не менее min (или следующее целое число, которое больше min , если min не целое) и не более (но не равно) max .
function getRandomInt(min, max) min = Math.ceil(min); max = Math.floor(max); return Math.floor(Math.random() * (max - min)) + min; //Максимум не включается, минимум включается >
Примечание: Может показаться заманчивым использовать Math.round() для округления, но это может сделать распределение неравномерным, что может оказаться неприемлемым для ваших нужд.
Получение случайного целого числа в заданном интервале, включительно
Функция getRandomInt() выше включает минимальное значение, но не включает максимальное. Но что если вам нужно, чтобы включалось и минимальное, и максимальное значение? Функция getRandomIntInclusive() решает этот вопрос.
function getRandomIntInclusive(min, max) min = Math.ceil(min); max = Math.floor(max); return Math.floor(Math.random() * (max - min + 1)) + min; //Максимум и минимум включаются >
Спецификации
Совместимость с браузерами
BCD tables only load in the browser
Found a content problem with this page?
This page was last modified on 22 окт. 2022 г. by MDN contributors.
Your blueprint for a better internet.