JavaScript метод Math.random()

Определение и применение

JavaScript метод random() объекта Math возвращает псевдослучайное число от 0 до 1. Обращаю Ваше внимание на то, что метод random() может возвращать значение 0, но никогда не вернет значение 1.

Проверьте поведение в редактируемом примере.

Поддержка браузерами

Спецификация: ecma262

Поддерживается во всех основных браузерах с 2015 года.

Показать браузеры
Совместимостьjavascript.builtins.Math.random
ВозможностьКомпьютерыМобильные
ChromeEdgeFirefoxOperaSafariChrome AndroidFirefox for AndroidOpera AndroidSafari on iOSSamsung BrowserWebView AndroidWebView on iOS
random✓1✓12✓1✓3✓1✓18✓4✓10.1✓1✓1.0✓4.4✓1

поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31

JavaScript синтаксис

JavaScript
Math.random();

Спецификация

ECMAScript: Math.random()

Возвращаемое значение и особенности

Возвращает Number в диапазоне 0 ≤ x < 1 с приблизительно равномерным распределением. Аргументов нет; задать или сбросить начальное состояние генератора этим API нельзя. Для паролей, токенов и других криптографических задач используйте Web Crypto, а не Math.random().

Примеры, попробуйте сами

В следующем примере с помощью метода random() мы получим случайное число от 0 (включительно) до 1 (не включая):

Как получить случайное число от нуля до единицы

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

index.html
HTML
<p>Результат выполнения выводится в консоль.</p>
main.js
JavaScript
const rnd = Math.random()
console.log(rnd) // При каждом запуске новое число в диапазоне [0, 1).

В следующем примере с помощью метода random() мы рассмотрим как получить случайное число внутри определенного диапазона. Обратите внимание, что возвращаемое значение не может быть меньше min; верхняя граница max математически исключена, но из-за округления Number иногда достижима:

Как масштабировать случайное число

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

index.html
HTML
<p>Результат выполнения выводится в консоль.</p>
main.js
JavaScript
function getRandomFromRange(min, max) {
    return Math.random() * (max - min) + min
}

console.log(getRandomFromRange(5, 10)) // Результат зависит от нового случайного значения.
console.log(getRandomFromRange(5, 10)) // Результат зависит от нового случайного значения.
console.log(getRandomFromRange(5, 10)) // Результат зависит от нового случайного значения.
console.log(getRandomFromRange(5, 10)) // Результат зависит от нового случайного значения.
console.log(getRandomFromRange(5, 10)) // Результат зависит от нового случайного значения.

В следующем примере мы рассмотрим как с помощью метода random(), ceil() и floor() объекта Math получить случайное целое число внутри определенного диапазона. Обратите внимание, что возвращаемое значение лежит между округлёнными границами включительно: от Math.ceil(min) до Math.floor(max):

Как получить случайное целое с включёнными границами

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

index.html
HTML
<p>Результат выполнения выводится в консоль.</p>
main.js
JavaScript
// Обе округлённые границы включены. Пример рассчитан на небольшие конечные диапазоны.
function getRandomIntFromRange(min, max) {
    const lower = Math.ceil(min)
    const upper = Math.floor(max)
    if (
        !Number.isSafeInteger(lower) ||
        !Number.isSafeInteger(upper) ||
        lower > upper ||
        !Number.isSafeInteger(upper - lower + 1)
    ) {
        throw new RangeError('Нужен непустой диапазон безопасных целых')
    }
    return Math.floor(Math.random() * (upper - lower + 1)) + lower
}
for (let i = 0; i < 5; i++) {
    console.log(getRandomIntFromRange(5, 10)) // Целое от 5 до 10; результат меняется при запуске.
}
console.log('Одна точка:', getRandomIntFromRange(7, 7))
try {
    getRandomIntFromRange(5.1, 5.9)
} catch (error) {
    console.log('Пустой диапазон:', error.name)
}

В следующем примере мы рассмотрим как с помощью методов ceil() и random() сравнить ошибочную формулу индекса с правильной формулой через Math.floor():

Как выбрать случайный элемент массива

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

index.html
HTML
<p>Результат выполнения выводится в консоль.</p>
main.js
JavaScript
const arr = ['a', 'b', 'c']
const random = Math.random()
const index = Math.floor(random * arr.length)
console.log('Случайный элемент:', arr[index])
// Крайний случай random = 0 показывает ошибку формулы с ceil().
console.log('Индекс через floor при 0:', Math.floor(0 * arr.length))
console.log('Индекс через ceil при 0:', Math.ceil(0 * arr.length) - 1)
console.log('Элемент для 0.86:', arr[Math.floor(0.86 * arr.length)])