JavaScript 中 Math.random() 生成随机数据

简介: Math.random() 将生成一个介于0(包括)和 1(不包括)之间的伪随机浮点数(带有小数的数),随机数并不意味着总是得到一个唯一的数字,它会在一段时间后产生相同的数字。这里的间隔很长,所以可能不会得到两次相同的数。

Math.random() 将生成一个介于0(包括)和 1(不包括)之间的伪随机浮点数(带有小数的数),随机数并不意味着总是得到一个唯一的数字,它会在一段时间后产生相同的数字。这里的间隔很长,所以可能不会得到两次相同的数。

1. 随机布尔值

通过 Math.random() 返回 0-1 之间的随机数,生成随机布尔值。

const randomBoolean = () => Math.random() >= 0.5;
console.log(randomBoolean()); // true
console.log(randomBoolean()); // false
console.log(randomBoolean()); // false

2. 随机数

同样利用通过 Math.random() 返回 0-1 之间的随机数的原理,结果乘以最大数并四舍五入即可获得一个介于 0max 之间的数字。

const randomNumber = (max) => Math.round(Math.random() * max);
console.log(randomNumber(100));

进一步完善上面的方法以可以获取指定最小和最大范围的随机数。

const randomNumber = (min, max) =>
Math.round(Math.random() * (max - min) + min);
console.log(randomNumber(51, 100));

3. 随机 ID

为了生成这个需求,可以借助 toString() 方法,然后把随机数转换成字符串。

const randomID = () => Math.random().toString(36).substring(2);
console.log(randomID()); // 961b4gd0t3

接下来分析一下原理,先来看 toString() 方法:

num.toString(radix)

参数 radix 是介于 236 之间的数字。

Base36是一个二进制到文本编码表示方案的二进制数据以ASCII通过将其转化为一个字符串格式基数 -36 表示。选择 36 十分方便,因为可以使用阿拉伯数字 0–9 和拉丁字母 A–Z [1](ISO基本拉丁字母)表示数字。

Math.random 结果不包括 1 但包括 0。这意味着 randomID 结果是空 "" 的可能性很小,那是因为依赖序列的开头为 0. ,在这种情况下,可以简单地返回0或任何其他的值作为默认字符串id :

const randomID = () => Math.random().toString(36).substring(2) || "0";

4. 随机十六进制数

可以应用上面相同原理来创建一个随机的十六进制数函数(随机颜色),这里将使用 ES7 字符串填充函数:padEnd,如下代码:

const randomHex = () =>
`#${Math.random().toString(16).slice(2, 9).padEnd(6, "0")}`;
console.log(randomHex()); // #2b988b5

如果不想使用 ES7,可以改下以兼容其他版本:

const randomHex = () =>
`#${(0x1000000 + Math.random() * 0xffffff).toString(16).slice(1, 7)}`;
console.log(randomHex()); // #4efabd


相关文章
|
7月前
|
Web App开发 数据采集 JavaScript
动态网页爬取:Python如何获取JS加载的数据?
动态网页爬取:Python如何获取JS加载的数据?
1202 58
|
JavaScript 前端开发
js实现数据的双向绑定
js实现数据的双向绑定
310 59
|
JavaScript 算法 前端开发
采招网JS逆向:基于AES解密网络数据
采招网JS逆向:基于AES解密网络数据
307 0
|
9月前
|
数据采集 JavaScript 前端开发
JavaScript中通过array.filter()实现数组的数据筛选、数据清洗和链式调用,JS中数组过滤器的使用详解(附实际应用代码)
用array.filter()来实现数据筛选、数据清洗和链式调用,相对于for循环更加清晰,语义化强,能显著提升代码的可读性和可维护性。博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
监控 JavaScript 算法
深度剖析 Vue.js 响应式原理:从数据劫持到视图更新的全流程详解
本文深入解析Vue.js的响应式机制,从数据劫持到视图更新的全过程,详细讲解了其实现原理和运作流程。
|
数据采集 存储 JavaScript
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
本文介绍了如何使用Puppeteer和Node.js爬取大学招生数据,并通过代理IP提升爬取的稳定性和效率。Puppeteer作为一个强大的Node.js库,能够模拟真实浏览器访问,支持JavaScript渲染,适合复杂的爬取任务。文章详细讲解了安装Puppeteer、配置代理IP、实现爬虫代码的步骤,并提供了代码示例。此外,还给出了注意事项和优化建议,帮助读者高效地抓取和分析招生数据。
501 0
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
|
前端开发 JavaScript
JS-数据筛选
JS-数据筛选
133 7
|
JavaScript 数据安全/隐私保护
2024了,你会使用原生js批量获取表单数据吗
2024了,你会使用原生js批量获取表单数据吗
241 4
|
JavaScript 前端开发 安全
js逆向实战之烯牛数据请求参数加密和返回数据解密
【9月更文挑战第20天】在JavaScript逆向工程中,处理烯牛数据的请求参数加密和返回数据解密颇具挑战。本文详细分析了这一过程,包括网络请求监测、代码分析、加密算法推测及解密逻辑研究,并提供了实战步骤,如确定加密入口点、逆向分析算法及模拟加密解密过程。此外,还强调了法律合规性和安全性的重要性,帮助读者合法且安全地进行逆向工程。
409 11
|
JSON JavaScript 数据格式
js实现更新数据
js实现更新数据
185 1