JavaScript метод Math.random()
Определение и применение
JavaScript метод random() объекта
Math
возвращает псевдослучайное число от 0 до 1. Обращаю Ваше внимание на то, что метод random() может
возвращать значение 0, но никогда не вернет значение 1.
Проверьте поведение в редактируемом примере.
Поддержка браузерами
Спецификация: ecma262
Поддерживается во всех основных браузерах с 2015 года.
| Возможность | Компьютеры | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
random | 1 | 12 | 1 | 3 | 1 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 | 1 |
поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31
JavaScript синтаксис
Math.random();
Спецификация
Возвращаемое значение и особенности
Возвращает Number в диапазоне 0 ≤ x < 1 с приблизительно равномерным распределением. Аргументов нет;
задать или сбросить начальное состояние генератора этим API нельзя. Для паролей, токенов и других криптографических
задач используйте Web Crypto, а не Math.random().
Примеры, попробуйте сами
В следующем примере с помощью метода random() мы получим случайное число от 0 (включительно) до 1 (не
включая):
Как получить случайное число от нуля до единицы
Повторите запуск, затем измените границы или элементы массива. Наблюдайте, какие значения могут появиться.
index.html
<p>Результат выполнения выводится в консоль.</p>
main.js
const rnd = Math.random()
console.log(rnd) // При каждом запуске новое число в диапазоне [0, 1).
В следующем примере с помощью метода random() мы рассмотрим как получить
случайное число внутри определенного диапазона. Обратите внимание, что возвращаемое значение не может быть
меньше min; верхняя граница max математически исключена, но из-за округления Number иногда достижима:
Как масштабировать случайное число
Повторите запуск, затем измените границы или элементы массива. Наблюдайте, какие значения могут появиться.
index.html
<p>Результат выполнения выводится в консоль.</p>
main.js
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
<p>Результат выполнения выводится в консоль.</p>
main.js
// Обе округлённые границы включены. Пример рассчитан на небольшие конечные диапазоны.
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
<p>Результат выполнения выводится в консоль.</p>
main.js
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)])