Math.random()
将生成一个介于0(包括)和 1(不包括)之间的伪随机浮点数(带有小数的数),随机数并不意味着总是得到一个唯一的数字,它会在一段时间后产生相同的数字。这里的间隔很长,所以可能不会得到两次相同的数。
1. 随机布尔值
通过 Math.random()
返回 0-1
之间的随机数,生成随机布尔值。
constrandomBoolean=()=>Math.random()>=0.5;console.log(randomBoolean());//trueconsole.log(randomBoolean());//falseconsole.log(randomBoolean());//false
2. 随机数
同样利用通过 Math.random()
返回 0-1
之间的随机数的原理,结果乘以最大数并四舍五入即可获得一个介于 0
和 max
之间的数字。
constrandomNumber=(max)=>Math.round(Math.random()*max);console.log(randomNumber(100));
进一步完善上面的方法以可以获取指定最小和最大范围的随机数。
constrandomNumber=(min,max)=>Math.round(Math.random()*(max-min)+min);console.log(randomNumber(51,100));
3. 随机 ID
为了生成这个需求,可以借助 toString()
方法,然后把随机数转换成字符串。
constrandomID=()=>Math.random().toString(36).substring(2);console.log(randomID());//961b4gd0t3
接下来分析一下原理,先来看 toString()
方法:
num.toString(radix)
参数 radix
是介于 2
和 36
之间的数字。
Base36
是一个二进制到文本编码表示方案的二进制数据以ASCII
通过将其转化为一个字符串格式基数-36
表示。选择36
十分方便,因为可以使用阿拉伯数字0–9
和拉丁字母 A–Z [1](ISO基本拉丁字母)表示数字。
Math.random
结果不包括 1
但包括 0
。这意味着 randomID
结果是空 ""
的可能性很小,那是因为依赖序列的开头为 0.
,在这种情况下,可以简单地返回0
或任何其他的值作为默认字符串id :
constrandomID=()=>Math.random().toString(36).substring(2)||"0";
4. 随机十六进制数
可以应用上面相同原理来创建一个随机的十六进制数函数(随机颜色),这里将使用 ES7
字符串填充函数:padEnd
,如下代码:
constrandomHex=()=>`#${Math.random().toString(16).slice(2,9).padEnd(6,"0")}`;console.log(randomHex());//#2b988b5
如果不想使用 ES7
,可以改下以兼容其他版本:
constrandomHex=()=>`#${(0x1000000+Math.random()*0xffffff).toString(16).slice(1,7)}`;console.log(randomHex());//#4efabd