Уроки JavaScript – примеры использования случайности

В JavaScript довольно часто нужно использовать случайность или случайное поведение. Самым простым примером будет получение случайного числа для проведения жеребьевки. Или, например, представить возможный результат броска монеты. Но существует много разных видов случайности, и для различных приложений нужно подбирать свой вид случайного результата.

 

Самая простая случайность

Простейшей формой случайности, которая встроена в JavaScript, является функция Math.random(). Чтобы увидеть ее в действии, наберите в консоли браузера (вызов консоли Ctrl+Shift+I) функцию:

Math.random();
//0.2735944957535754 – пример результата

 

Функция Math.random() всегда возвращает число с плавающей точкой от 0 до 1.

Примечание: Технически, число, возвращаемое Math.random(), может быть 0, но никогда не будет точно 1.

 

Поскольку эта функция так часто используется, Math.random() часто помещается в собственную функцию, которую потом вызывают в скрипте:

<script>
function getRandom() {
  return Math.random();
}
</script>

 

 

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

 

 

Случайность между числами: min включено, max исключено

Для этой функциональности нам потребуется немного математики:

 

С плавающей точкой

function getRandomFloat(min, max) {
  return Math.random() * (max - min) + min;
}
getRandomFloat(15, 127);
//61.65118618053822 – пример результата

 

 

С использованием целого числа

function getRandomInt(min, max) {
  return Math.floor(Math.random() * (max - min)) + min;
}
getRandomInt(99, 720);
//552 – пример результата

 

 

 

Случайное целое число в диапазоне (включая минимальное и максимальное)

function getRandomInRange(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}
getRandomInRange(1, 175);
//73 – пример результата

 

 

Результат броска монеты (случайные Правда/Ложь, 1/0)

Если вы хотите, чтобы результатом был простой случайный результат, например 0 или 1, что можно представить в виде броска монеты, используйте следующий рецепт:

function coinToss() {
  return Math.floor(Math.random() * 2);
}
coinToss();
//1 – пример результата

 

 

Случайный результат с использованием исключений

Для ограниченного диапазона целых чисел создайте массив чисел, из которых вы хотите выбирать, и используйте следующий рецепт для случайного выбора из массива:

<script>
var numPool = [ 2, 3, 5, 8, 11, 25 ],
rand = numPool[Math.floor(Math.random() * numPool.length)];
console.log(rand);
//11 – пример результата
</script>

 

 

Случайный, неповторяющийся массив

Для небольшого набора чисел создайте массив, заполненный элементами, перемешайте их случайным образом, поместите результаты в новый массив, а затем вытащите перемешанные элементы по одному:

<script>
var numPool = [ 18, 42, 37, 9, 24, 100 ];
function shuffle(numPool) {
  for(var j, x, i = numPool.length; i; j = parseInt(Math.random() * i), x = numPool[--i], numPool[i] = numPool[j], numPool[j] = x);
  return numPool;
};
var randomResult = shuffle(numPool);
while( randomResult.length > 0 ) {
  console.log( randomResult.pop() );
}
// в результате указанный массив будет перемешан случайным образом
</script>

 

 

 

Криптографическая случайность в JavaScript

Ни один из рассмотренных методов не создает числа с достаточной случайностью для использования в криптографически безопасных функциях. Кстати, и результаты функции Math.random() не являются достаточно случайными.

Для криптографической случайности в JavaScript мы можем использовать API веб-криптографии, создав типизированный массив (typedArray):

var cryptoStor = new Uint16Array(5);

 

Здесь мы создаем массив с пятью различными слотами, каждый из которых может содержать неподписанное (беззнаковое) 16-разрядное целое число. Для других параметров целого числа вы можете использовать Int8Array, Uint8Array, int16Array, Int32Array и Uint32Array.

 

После этого вы можете заполнить массив случайными числами определенного типа:

window.crypto.getRandomValues(cryptoStor);

 

В результате вы получите в консоли такие примерные значения:

//Uint16Array(5) [23386, 29207, 40761, 23872, 54616] – пример результата

 

 

API веб-криптографии имеет хорошую поддержку в современных браузерах, хотя в некоторых случаях требуется использование префикса поставщика.

На сегодня все, спасибо за внимание!

 

Recent Posts

Обзор WordPress 7.0 «Armstrong»: Новая эра ИИ и масштабная перестройка Core-архитектуры

20 мая 2026 года официально состоялся релиз долгожданной мажорной версии WordPress 7.0 «Armstrong», названной в…

1 день ago

History Hijacking: Почему Google наказывает за «сломанную» кнопку Назад и как защитить сайт с помощью CSP

Каждый владелец сайта и SEO-специалист ведет ежедневную упорную борьбу за удержание пользователя на страницах вебресурса.…

2 дня ago

Интернет-магазин без лишнего функционала: как не переплатить за разработку на старте

Многие предприниматели сталкиваются с одной и той же проблемой. После утверждения бюджета разработка затягивается, появляются…

3 дня ago

Как выбрать детские бутсы для футбольной секции и не ошибиться с типом подошвы

Футбольная секция быстро показывает, насколько обувь подходит ребенку. Если пара скользит, давит или плохо цепляется…

4 дня ago

Флагманский смартфон: почему стоит купить Samsung Galaxy S26 Ultra

Компания Samsung — один из лидеров на рынке электроники. Ее смартфоны выделяются надежностью, качественными дисплеями,…

4 дня ago

Глагол dar в испанском языке: значение, спряжение и особенности использования

Испанский язык привлекает миллионы людей своей мелодичностью, эмоциональностью и относительной простотой изучения. Одним из важнейших…

1 неделя ago