0

0

js如何实现随机数生成

煙雲

煙雲

发布时间:2025-08-22 13:10:01

|

296人浏览过

|

来源于php中文网

原创

javascript中实现随机数生成的核心方法是使用math.random()函数,它返回一个[0, 1)区间内的伪随机浮点数。1. 生成[0, 1)范围内的浮点数:直接调用math.random()即可;2. 生成指定范围内的浮点数:使用公式math.random() (max - min) + min;3. 生成指定范围内的整数:通过math.floor(math.random() (max - min + 1)) + min实现[min, max]区间内包含边界的整数。需要注意的是,math.random()生成的是伪随机数,基于确定性算法和初始种子,适用于一般场景如游戏、ui随机效果或数据模拟,但不适用于加密安全场景。对于高安全需求,应使用window.crypto.getrandomvalues()等加密级随机数生成api。随机数在实际开发中广泛应用于游戏机制、数据测试、ui动态变化、抽奖系统、验证码生成和唯一标识构建等场景,为程序增加不确定性与趣味性,但需根据用途选择合适的生成方式。

js如何实现随机数生成

JavaScript 中实现随机数生成的核心方法是使用内置的

Math.random()
函数。这个函数会返回一个浮点数,其值大于等于 0 且小于 1(即 [0, 1) 区间)。它不接受任何参数,每次调用都会产生一个看似随机的新数字。

解决方案

要生成随机数,我们主要依赖

Math.random()
。但仅仅得到一个 [0, 1) 的浮点数通常不够,我们更常需要的是特定范围内的整数或浮点数。

1. 生成 [0, 1) 范围内的浮点数: 这是

Math.random()
的默认行为。

const randomNumber = Math.random();
console.log(randomNumber); // 比如:0.7382910472819273

2. 生成指定范围内的浮点数: 如果你需要一个在

min
(包含) 和
max
(不包含) 之间的浮点数:

function getRandomFloat(min, max) {
  return Math.random() * (max - min) + min;
}

console.log(getRandomFloat(10, 20)); // 比如:13.56789

3. 生成指定范围内的整数: 这是最常见的需求。我们通常会结合

Math.floor()
Math.ceil()
来实现。

  • 生成 [0, max) 范围内的整数 (不包含 max):

    function getRandomIntUpTo(max) {
      return Math.floor(Math.random() * max);
    }
    
    console.log(getRandomIntUpTo(10)); // 比如:0, 1, ..., 9 中的任意一个
  • 生成 [min, max] 范围内的整数 (包含 min 和 max): 这个是我个人觉得最实用,也最容易出错的地方。很多人会忘记那个

    +1

    function getRandomIntInclusive(min, max) {
      min = Math.ceil(min);   // 确保min是整数
      max = Math.floor(max);  // 确保max是整数
      return Math.floor(Math.random() * (max - min + 1)) + min;
    }
    
    console.log(getRandomIntInclusive(1, 6)); // 模拟骰子,比如:1, 2, ..., 6 中的任意一个
    console.log(getRandomIntInclusive(10, 20)); // 比如:10, 11, ..., 20 中的任意一个

    这里

    (max - min + 1)
    是为了确保包含
    max
    本身。例如,如果你想在 1 到 6 之间取一个数,
    max - min
    是 5,但我们需要 6 个可能性 (1, 2, 3, 4, 5, 6),所以要
    +1

Math.random()
生成的随机数真的“随机”吗?(关于伪随机性)

说实话,当我第一次接触到“伪随机数”这个概念时,有点被震撼到。我们平时用

Math.random()
随手一写,感觉它就是完全随机的。但实际上,它生成的是“伪随机数”。

所谓的伪随机数,是指它们并非真正的随机,而是通过一个确定性的算法(一个种子值)计算出来的。如果你知道算法和初始种子,理论上你可以预测接下来的所有“随机”数。在 JavaScript 运行时环境中,这个种子通常是由系统时间或其他不易预测的因素来初始化的,所以对我们普通开发者来说,它看起来是足够随机的。

这有什么影响呢?对于大多数日常应用,比如游戏里的骰子、随机背景颜色、简单的抽奖或者模拟一些非关键数据,

Math.random()
提供的伪随机性是完全足够的。它的性能很好,用起来也方便。

但是,如果你的应用场景涉及到加密安全,比如生成密钥、安全的令牌或者需要高度不可预测性的数据,那么

Math.random()
就显得力不从心了。因为它的可预测性,可能被恶意用户利用。在这些情况下,我们通常会转向更专业的加密级随机数生成器。在浏览器环境中,这意味着使用
window.crypto.getRandomValues()
API,它会利用浏览器底层操作系统的熵源来生成真正意义上的加密安全随机数。

Ecshop批量生成购买记录自动评价插件
Ecshop批量生成购买记录自动评价插件

本插件支持2.7.2和2.7.3最新UTF-8版本最新升级(2012-10-08)1.可以批量选择商品生成评价和购买记录2.可以灵活控制生成的购买数量和评价数量.真正的真实购买记录.( 新升级版本改动如下:生成评价的时候会随机隐藏某些评价.只生成购买记录(你也可以自己选择某些要隐藏的评价).这样购买数量和评价数量相差40%左右,提高真实性 )生成的购买数量和评价数量 是真正的黄金比例,进一步提高真

下载
// 举个例子,生成一个安全的随机字节数组
const array = new Uint32Array(10);
window.crypto.getRandomValues(array);
console.log("加密安全的随机数:", array);
// 注意:这个API返回的是字节数组,需要进一步处理才能得到数字或字符串

不过,对于大多数“如何实现随机数”的问题,大家想的还是

Math.random()
这种简单直接的用法。

随机数在实际开发中有哪些常见的应用场景?

随机数在编程里简直无处不在,很多时候我们甚至没意识到自己正在使用它。我个人在开发中就经常碰到需要随机数的地方,它们能让应用变得更有趣、更灵活。

  • 游戏开发: 这是最直观的场景。

    • 骰子模拟:
      getRandomIntInclusive(1, 6)
      ,简单直接。
    • 卡牌洗牌: Fisher-Yates 洗牌算法就大量依赖随机数来打乱数组顺序。
    • 敌人AI行为: 让敌人随机选择攻击方式或移动路径,增加游戏的可玩性。
    • 掉落物品: 某个怪物掉落稀有物品的概率计算。
    • 地图生成: 程序化生成地形或关卡。
  • 数据模拟与测试:

    • 生成测试数据: 当你需要大量模拟用户数据、订单数据或者其他业务数据进行测试时,随机数能快速填充各种可能的值。
    • 性能测试: 模拟随机的用户请求,测试系统在高并发下的表现。
  • 用户界面 (UI) 和用户体验 (UX):

    • 随机背景色/主题: 每次刷新页面或点击按钮,给用户一个新鲜感。
    • 随机格言/提示: 在加载页面时显示不同的励志语录或使用技巧。
    • 验证码生成: 无论是图片验证码还是短信验证码,核心都是随机生成一串字符或数字。
  • 抽奖与选择:

    • 在线抽奖系统: 从参与者列表中随机抽取中奖者。
    • 广告轮播: 随机展示不同的广告内容,确保公平性。
    • 随机推荐: 在一个商品列表里随机推荐几款给用户。
  • 唯一标识符 (ID) 生成:

    • 虽然 UUID/GUID 有更专业的生成方式,但在某些简单场景下,结合时间戳和随机数也能生成一个在短时间内足够“唯一”的字符串作为临时ID。

随机数就像是程序世界里的一点点“不确定性”,正是这一点不确定性,让我们的应用变得更加生动和有趣。但记住,用对地方才是关键。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
mysql标识符无效错误怎么解决
mysql标识符无效错误怎么解决

mysql标识符无效错误的解决办法:1、检查标识符是否被其他表或数据库使用;2、检查标识符是否包含特殊字符;3、使用引号包裹标识符;4、使用反引号包裹标识符;5、检查MySQL的配置文件等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

183

2023.12.04

Python标识符有哪些
Python标识符有哪些

Python标识符有变量标识符、函数标识符、类标识符、模块标识符、下划线开头的标识符、双下划线开头、双下划线结尾的标识符、整型标识符、浮点型标识符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

286

2024.02.23

java标识符合集
java标识符合集

本专题整合了java标识符相关内容,想了解更多详细内容,请阅读下面的文章。

258

2025.06.11

c++标识符介绍
c++标识符介绍

本专题整合了c++标识符相关内容,阅读专题下面的文章了解更多详细内容。

124

2025.08.07

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

298

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1500

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

623

2023.11.24

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

31

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Rust 教程
Rust 教程

共28课时 | 5万人学习

PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.9万人学习

Git 教程
Git 教程

共21课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号