Math.random()
靜態方法會回傳一個大於等於 0 且小於 1 的浮點偽隨機數,其在該範圍內大致呈均勻分佈——你可以將其縮放到你想要的範圍。實作會選擇亂數生成演算法的初始種子;使用者無法選擇或重設它。
Math.random()
不
提供密碼學上安全的亂數。請勿將其用於任何與安全性相關的事物。請改用 Web Crypto API,更精確地說,是
Crypto.getRandomValues()
方法。
請注意,由於 JavaScript 中的數字是遵循四捨五入至最近偶數行為的 IEEE 754 浮點數,因此以下函式(不包括
Math.random()
本身)所聲稱的範圍並不精確。通常,聲稱的上限是無法達到的,但如果
Math.random()
回傳一個非常接近 1 的數字,微小的差異可能無法在請求的最大值下表示,因此導致達到上限。
function getRandom() {
return Math.random();
此範例回傳一個介於指定值之間的亂數。回傳值不小於(且可能等於)min,且小於(不等於)max。
function getRandomArbitrary(min, max) {
return Math.random() * (max - min) + min;
此範例回傳一個介於指定值之間的隨機整數。該值不小於 min(如果 min 不是整數,則為大於 min 的下一個整數),且小於(但不等於)max。
function getRandomInt(min, max) {
const minCeiled = Math.ceil(min);
const maxFloored = Math.floor(max);
return Math.floor(Math.random() * (maxFloored - minCeiled) + minCeiled); // 最大值不含,最小值包含
使用 Math.round() 來達成此目的可能很誘人,但這樣做會導致你的亂數遵循非均勻分佈,這可能不符合你的需求。
雖然上面的 getRandomInt() 函式在最小值上是包含的,但在最大值上是不包含的。如果你需要結果在最小值和最大值上都是包含的呢?下面的 getRandomIntInclusive() 函式可以達成此目的。
function getRandomIntInclusive(min, max) {
const minCeiled = Math.ceil(min);
const maxFloored = Math.floor(max);
return Math.floor(Math.random() * (maxFloored - minCeiled + 1) + minCeiled); // 最大值和最小值都包含
Specification