JavaScript 如何生成随机数

生活里我们总少不了和“随机”打交道:抽盲盒的隐藏款、抽奖转盘的中奖号码、甚至是奶茶店随机加的小料——这些随机结果背后,很多时候都藏着代码里的“随机数生成”。作为前端开发里最常用的编程语言之一,JavaScript 生成随机数的方法,其实一点都不复杂,只要用对方法,就能满足从“随便给个数字”到“严格控制范围的随机数”的各种需求。

最基础的“随便给个数字”:Math.random()

想生成一个最普通的随机数,JavaScript 里有个自带的“工具”,叫 Math.random(),它就像个摸牌机,每次按下按钮(调用这个方法),都会吐出一个介于 0(含)和 1(不含)之间的小数——注意哦,是0到1之间,不会等于1,比如可能吐出0.12、0.87、0.003之类的数。

JavaScript 如何生成随机数

举个生活化的例子:你把一块蛋糕分成100份,每份是0.01,你用 Math.random() 摸的那个数,就是“你拿到的蛋糕占比”,最小能拿到接近0的一点点,最大能拿到接近1的几乎整块,但永远拿不到正好整块。平时写代码时,如果你只需要一个“随便来的小数”,比如生成一个随机的背景透明度,直接用这个方法就够了,不用额外改参数。

生成整数:给随机数“放大取整”

光有小数还不够,我们平时更需要整数,比如抽奖要抽1到10的数字、生成4位随机验证码。这时候只要给 Math.random() 做点“小改造”就行。

假设你要生成1到10之间的整数:先把 Math.random() 得到的小数乘以10,这样范围就变成了0(含)到10(不含)的小数,比如0.12×10=1.2,0.87×10=8.7;再用 Math.floor() 把小数部分“砍掉”,只留整数部分,刚才的例子就变成1和8,再等一下?不对,刚才的数最大是接近10,砍掉小数后最大是9,所以如果要1到10,最后还要加1?哦不对,举个更准的:如果要0到9的整数,直接 Math.floor(Math.random()×10) 就行,刚才算的1.2和8.7砍完就是1和8,刚好是0-9的整数,就像你拿10张编号0-9的卡片,随机摸一张,不会摸到10。

如果要1到10的整数,那就在乘以10后加1,再取整:Math.floor(Math.random()×10 +1),这样最小的数是0+1=1,最大接近10+0.999=10.999,取整后就是10,完美对应抽奖要的1-10号奖券。

控制范围的随机数:通用公式

有时候我们需要更灵活的范围,比如生成5到20之间的整数,难道要每次改数字?其实有个通用公式,只要记住“下限和上限”就行:Math.floor(Math.random() × (上限 - 下限 +1)) + 下限。

还是用例子验证:要5到20的整数,上限减下限是15,加1就是16,所以 Math.random()×16 得到0到16的小数,取整后是0到15,再加5,就变成5到20的整数,刚好是我们要的范围,就像你把16张编号0-15的卡片,都加上5,就变成5到20的卡片,随便抽一张,就是对应范围的数。

这个公式不管是1到100,还是100到200,只要把对应的上下限套进去就行,不用每次重新想怎么算,非常方便。

注意的小细节:别踩“边界坑”

最后还要提一个容易踩的小坑:Math.random() 永远不会等于1,所以如果直接用 Math.floor(Math.random() × 上限),最大的整数是上限减1,比如×10的话,最大是9,不会到10;如果需要包含上限,一定要用刚才的通用公式加“+1”,不然会少一个数,就像你抽奖本来有10个名额,不小心少算了一个,就会出错。

现在你再看那些生活里的随机场景,比如网页上的随机头像、随机推荐的商品,其实都是用这些简单的方法生成的,是不是觉得没那么神秘了?只要记住这几个基础方法,就能搞定大部分前端里的随机数需求啦。

上一篇 TypeScript static 怎么用