JavaScript生成隨機數(shù)的各種方法大全
一、Math.random()——最基礎的隨機數(shù)生成方式
1. Math.random() 的基本用法
Math.random() 是 JavaScript 內置的隨機數(shù)生成函數(shù),每次調用都會返回一個 0(包含)到 1(不包含) 之間的浮點數(shù)。
console.log(Math.random()); // 可能輸出 0.2856397428015183 console.log(Math.random()); // 可能輸出 0.9123847982374728
2. 生成指定范圍的隨機數(shù)
由于 Math.random() 生成的是 [0, 1) 之間的隨機數(shù),我們通常需要進行變換,以適應不同的需求。
生成 [min, max) 之間的隨機浮點數(shù)
function getRandomFloat(min, max) {
return Math.random() * (max - min) + min;
}
console.log(getRandomFloat(1, 10)); // 可能輸出 4.7329384
生成 [min, max] 之間的隨機整數(shù)
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
console.log(getRandomInt(1, 10)); // 可能輸出 7
3. Math.random() 的優(yōu)缺點
優(yōu)點:
- 內置方法,簡單易用
- 適用于大多數(shù)一般性隨機數(shù)生成需求
缺點:
- 生成的隨機數(shù)質量較低,不適用于高安全性需求(如密碼生成、加密等)
- 無法直接生成正態(tài)分布等更復雜的隨機數(shù)
二、使用 crypto.getRandomValues() 生成高安全性隨機數(shù)
1. 介紹
crypto.getRandomValues() 是 Web Crypto API 提供的安全隨機數(shù)生成方法,適用于需要更高隨機性和安全性的場景,如密碼學應用。
2. 基本用法
function getSecureRandomInt(min, max) {
const randomBuffer = new Uint32Array(1);
window.crypto.getRandomValues(randomBuffer);
return min + (randomBuffer[0] % (max - min + 1));
}
console.log(getSecureRandomInt(1, 100)); // 可能輸出 42
3. crypto.getRandomValues() 的優(yōu)缺點
優(yōu)點:
- 更高的隨機性,適用于密碼學需求
- 不依賴外部庫,瀏覽器內置支持
缺點:
- 僅適用于生成整數(shù),無法直接生成浮點數(shù)
- 需要使用
Uint32Array,使用方式比Math.random()復雜 - 僅在瀏覽器環(huán)境可用,Node.js 需要使用
crypto.randomBytes
三、使用 Node.js 的 crypto 模塊生成隨機數(shù)
1. crypto.randomBytes() 生成隨機字節(jié)
在 Node.js 環(huán)境下,可以使用 crypto.randomBytes() 生成隨機數(shù)據(jù)。
const crypto = require('crypto');
function getRandomBytes(size) {
return crypto.randomBytes(size).toString('hex');
}
console.log(getRandomBytes(4)); // 可能輸出 'e9f32c7b'
2. 生成隨機整數(shù)
function getSecureRandomInt(min, max) {
const randomBuffer = crypto.randomBytes(4);
const randomNumber = randomBuffer.readUInt32BE(0);
return min + (randomNumber % (max - min + 1));
}
console.log(getSecureRandomInt(1, 100)); // 可能輸出 78
3. Node.js crypto 相關方法的優(yōu)缺點
優(yōu)點:
- 適用于服務器端,安全性高
- 適用于加密、身份驗證等場景
缺點:
- 僅適用于 Node.js,無法在瀏覽器端使用
- 代碼較復雜,使用成本較高
四、使用第三方庫(如 seedrandom)生成可復現(xiàn)的隨機數(shù)
1. 介紹
在某些場景下,我們希望隨機數(shù)是可預測和可復現(xiàn)的,比如游戲隨機種子、數(shù)據(jù)模擬等。這時可以使用 seedrandom 庫。
2. 安裝和使用
npm install seedrandom
const seedrandom = require('seedrandom');
const rng = seedrandom('my-seed');
console.log(rng()); // 可能輸出 0.928372347
console.log(rng()); // 可能輸出 0.238472834
3. seedrandom 的優(yōu)缺點
優(yōu)點:
- 可復現(xiàn)的隨機數(shù),適用于游戲、數(shù)據(jù)模擬等場景
- 支持不同的隨機數(shù)生成算法
缺點:
- 需要安裝額外的庫
- 不適用于高安全性場景
五、其他特殊的隨機數(shù)生成方式
1. 生成隨機布爾值
function getRandomBoolean() {
return Math.random() >= 0.5;
}
console.log(getRandomBoolean()); // 可能輸出 true 或 false
2. 生成隨機顏色
function getRandomColor() {
return `#${Math.floor(Math.random() * 16777215).toString(16)}`;
}
console.log(getRandomColor()); // 可能輸出 '#3e4f1b'
3. 生成隨機 UUID
function getUUID() {
return crypto.randomUUID();
}
console.log(getUUID()); // 可能輸出 '3d7a3b44-5a10-4d72-bf58-c13f01b4a4a6'
六、總結
JavaScript 提供了多種生成隨機數(shù)的方法,每種方法適用于不同的場景:
Math.random():適用于一般性隨機數(shù)需求,但不適合高安全性場景。crypto.getRandomValues():適用于高安全性需求,如密碼生成。- Node.js
crypto.randomBytes():適用于服務器端高安全性隨機數(shù)生成。 seedrandom:適用于需要可復現(xiàn)隨機數(shù)的場景,如游戲隨機種子。
以上就是JavaScript生成隨機數(shù)的各種方法大全的詳細內容,更多關于JavaScript生成隨機數(shù)的資料請關注腳本之家其它相關文章!

