習(xí)慣使用JS的人都知道獲取隨機數(shù)是很常見的操作之一。在日常工作中,我們在很多場景下都需要獲取一個隨機數(shù),比如生成驗證碼、隨機展示圖片等需求。解決這些問題,JS的Math對象提供了非常方便可靠的解決方案。
我們可以使用Math對象中的random()方法來獲取0-1之間的隨機數(shù),但我們更經(jīng)常使用的是random()方法的一個變體,它通過對返回值進(jìn)行處理來得到我們期望的隨機數(shù)范圍。
Math.floor(Math.random() * (max - min + 1) + min)
Math.random() 返回 0 到 1 之間(包括 0 不包括 1)的一個隨機數(shù)。乘以 (max - min + 1) 將區(qū)間變?yōu)?0 到 (max-min) 之間的數(shù),再加上 min,就可以得到 min 到 max 之間的隨機數(shù)。
比如想獲取1-10之間的隨機數(shù):
Math.floor(Math.random() * 10 + 1);
除了獲取整數(shù)之外,有時候我們還需要獲取一個指定范圍內(nèi)的隨機小數(shù)。這時候只需在獲取隨機數(shù)之后,對其進(jìn)行除以一個范圍大小的處理即可。比如:
function randomFloat(min, max) { return Math.random() * (max - min) + min; }
這樣,我們就可以通過傳入想要獲取的數(shù)值范圍,直接調(diào)用該函數(shù)得到一個指定范圍內(nèi)的隨機小數(shù)。
需要注意的是,Math.random() 方法的缺點在于生成的隨機數(shù)不是真正的隨機,而是偽隨機。這意味著在同一刻生成隨機數(shù)的概率很高,尤其在獲取多個隨機數(shù)時,最好加上一個隨機化種子。
function randomBySeed(seed) { const x = Math.sin(seed) * 10000; return x - Math.floor(x); }
通過傳入不同的種子值,就可以獲得不同的隨機數(shù)序列了。
總而言之,獲取隨機數(shù)是我們在日常開發(fā)中經(jīng)常會碰到的問題,而Math對象提供了許多簡單好用的方法,方便我們直接調(diào)用。希望這篇文章可以對大家有所幫助。