Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
機(jī)數(shù)方法是javaScript中經(jīng)常使用的一種方法。 例如,需要在屏幕上的一個(gè)隨機(jī)位置顯示一幅圖像,編寫的小游戲要扔骰子等。javaScript中Math對象的random()方法生成0-1之間的隨機(jī)數(shù),它的隨機(jī)數(shù)種子采用系統(tǒng)時(shí)間,因此可以基本保證每次調(diào)用random()方法時(shí)都會采用不同的偽隨機(jī)數(shù)序列。下面來對javascript中的各種隨機(jī)數(shù)方法做一個(gè)總結(jié)。
基本的隨機(jī)數(shù)
在javaScript中最簡單的使用隨機(jī)數(shù)的方法是Math.random()方法。我們可以直接在chrome瀏覽器的控制臺中測試一下這個(gè)方法,如下圖:
Math.random()方法總是會返回0-1之間的浮點(diǎn)數(shù)。Math.random()方法返回的隨機(jī)數(shù)可能是0,但是永遠(yuǎn)不會是1。
返回兩個(gè)指定數(shù)值之間的隨機(jī)數(shù)(不包含最大值)
在實(shí)際使用中,我們可能需要獲取兩個(gè)指定數(shù)值之間的隨機(jī)數(shù)。同樣,我們獲取的這個(gè)隨機(jī)數(shù)可能等于最小值,但是不會等于最大值。
1、獲取兩個(gè)指定數(shù)值之間隨機(jī)浮點(diǎn)數(shù)。
function getRandomFloat(min, max) {
return Math.random() * (max - min) + min;
}
例如下面是在控制臺中執(zhí)行該函數(shù)得到50到100之間的隨機(jī)浮點(diǎn)數(shù)的結(jié)果。
2、獲取兩個(gè)指定數(shù)值之間隨機(jī)整數(shù)。
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min)) + min;
}
例如下面是在控制臺中執(zhí)行該函數(shù)得到50到100之間的隨機(jī)整數(shù)的結(jié)果。
返回兩個(gè)指定數(shù)值之間的隨機(jī)數(shù)(包含最大值)
如果需要返回的隨機(jī)數(shù)可以包含最大值,可以使用下面的函數(shù)來實(shí)現(xiàn)。
function getRandomInRange(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
拋硬幣(隨機(jī)布爾值)
如果你想使用0和1來代表拋硬幣的結(jié)果,代碼類似下面的樣子。
function coinToss() {
return Math.floor(Math.random() * 2);
}
如果你需要返回實(shí)際的true
或false
值,代碼如下。
function coinToss() {
return (Math.floor(Math.random() * 2) === 0);
}
使用Web Cryptography API來生成一組隨機(jī)數(shù)
Web Cryptography API是W3C發(fā)布的Web加密API(Web Cryptography API)的標(biāo)準(zhǔn)草案。該文檔定義了在Web應(yīng)用中執(zhí)行基本加解密操作的JavaScript API,如哈希操作(hash)、簽名生成和驗(yàn)證(signature generation and verification),以及加密解密等。此外,該文檔還描述了與密鑰管理有關(guān)的操作。API的用途覆蓋用戶或服務(wù)的認(rèn)證、文檔或代碼的簽名、通信的機(jī)密性與完整性保證等。
我們可以使用Web Cryptography API來生成一組隨機(jī)數(shù)。
var cryptoStor = new Uint16Array(8);
上面的代碼會生成包含8個(gè)16位無符號整數(shù)的數(shù)組。其它可以使用整數(shù)選項(xiàng)有:Int8Array,Uint8Array,int16Array,Int32Array 和 Uint32Array。
然后使用隨機(jī)數(shù)來填充數(shù)組。
window.crypto.getRandomValues(cryptoStor);
JavaScript中Math對象提供了一個(gè)random方法, 函數(shù)返回一個(gè)浮點(diǎn)數(shù),隨機(jī)數(shù)在范圍從0 到小于1,也就是說,從 0(包括 0)往上,但是不包括 1(排除 1)
console.log("第一次: ", Math.random()); // 0.11548793236830579
console.log("第二次: ", Math.random()); // 0.40543646157371227
/**
* 生成一個(gè)范圍內(nèi)的隨機(jī)數(shù)
*/
const getRandom = (min, max) => {
// 首先我們獲取一個(gè)[0,1)的浮點(diǎn)數(shù)
const floatRandom = Math.random();
// 然后計(jì)算出最大值和最小值之間的范圍, 加1是為了可以等于max
const difference = max - min + 1;
// 生成[0,difference]之間的隨機(jī)數(shù), 向下取整
const random = Math.floor(difference * floatRandom);
// 返回[min, difference + min] => [min, max]
const randomWithinRange = random + min;
return randomWithinRange;
};
console.log(getRandom(7, 9));
我們用JavaScript寫效果的時(shí)候經(jīng)常會用到一些隨機(jī)數(shù),比如我們在做隨機(jī)點(diǎn)名,或者說我們開年會的時(shí)候?qū)懸粋€(gè)隨機(jī)的抽獎的效果,這些效果當(dāng)中都要用到JavaScript抽取隨機(jī)數(shù),很多同學(xué)在抽取隨機(jī)數(shù)的時(shí)候不好掌握技巧,其實(shí),抽取隨機(jī)數(shù)非常簡單,只需要我們掌握J(rèn)avaScript這門語言的Math對象里的抽取隨機(jī)數(shù)的公式就可以。
JavaScript中數(shù)學(xué)對象Math抽取隨機(jī)數(shù)的公式詳解
下面是抽取隨機(jī)數(shù)的公式:
取0-1之間的隨機(jī)小數(shù)(取值范圍無限接近于0,無限接近于1):Math.random();
取x到y(tǒng)之間的隨機(jī)數(shù):Math.random()*(y-x)+x;
例如,取12至29之間的隨機(jī)小數(shù)(取值范圍無限接近于12,無限接近于29):Math.random()*(29-12)+12;
取x到y(tǒng)之間的隨機(jī)整數(shù)(能取到x和y):Math.floor(Math.random()*(y+1-x)+x);
例如,取12到29之間的任意的隨機(jī)整數(shù)(能取到12和29):Math.floor(Math.random()*(29+1-12)+12);
如果還有疑問可以到后盾網(wǎng)論壇進(jìn)行提問:bbs.houdunwang.com,有專業(yè)的老師及時(shí)幫你解答哦!
【本文來自 孫琪崢博客 http://www.sunqizheng.com/,想獲取更好的頁面瀏覽效果或者有任何問題請進(jìn)入博客,同時(shí)也可在博主評論區(qū)進(jìn)行留言,讓博主為大家答疑解惑~】
*請認(rèn)真填寫需求信息,我們會在24小時(shí)內(nèi)與您取得聯(lián)系。