①Math.random ():
1、为了保证足够的性能,Math.random () 随机数并不是实时生成的,而是直接生成一组随机数(64 个),并放在缓存中。当这一组随机数取完之后再重新生成一批,放在缓存中;
2、由于 Math.random () 的底层算法是公开的,这就导致,如果攻击者知道了当前随机生成器的状态,那就可以知道缓存中的所有随机数,那就很容易匹配与破解;
②getRandomValues ():
1、和 Math.random () 方法的区别在于,getRandomValues () 方法的随机种子生成器更加的无序;
2、不同浏览器下 getRandomValues () 方法生成的随机数可能是有区别的;
3、getRandomValues () 方法的底层实现是没有缓存的,随机数都是实时生成的,因此,性能上是要比 Math.random () 差的;
(参考:www.zhangxinxu.com/wordpress/2…