JavaScript Math.random()函数返回0到1之间的随机值,根据当前时间自动播种(类似于Java我相信).但是,我认为没有办法为你设置自己的种子.
如何创建一个随机数生成器,我可以提供自己的种子值,以便我可以生成一个可重复的(伪)随机数序列?
我目前正在使用JavaScript制作康威的生命游戏,我注意到函数Math.random()总是返回某种模式.以下是100x100网格中随机结果的示例:

有谁知道如何获得更好的随机数字?
ApplyRandom: function() {
var $this = Evolution;
var total = $this.Settings.grid_x * $this.Settings.grid_y;
var range = parseInt(total * ($this.Settings.randomPercentage / 100));
for(var i = 0; i < total; i++) {
$this.Infos.grid[i] = false;
}
for(var i = 0; i < range; i++) {
var random = Math.floor((Math.random() * total) + 1);
$this.Infos.grid[random] = true;
}
$this.PrintGrid();
},
Run Code Online (Sandbox Code Playgroud)
[UPDATE]
我在这里创建了一个jsFiddle:http://jsfiddle.net/5Xrs7/1/
[UPDATE]
似乎Math.random()毕竟是好的(感谢raina77ow).对不起人!:(.如果你对结果感兴趣,这里是游戏的更新版本:http://jsfiddle.net/sAKFQ/
(但我认为还有一些漏洞......)
我需要在Javascript中生成加密安全的伪随机数.我知道window.crypto.getRandomValuesAPI,它完全符合我的要求.但是,我也知道它是在最近(2011年左右)推出的.
我可以安全地假设window.crypto.getRandomValues存在,或者使用它会在某些浏览器上引入兼容性问题吗?是否有任何主要(广泛使用)的浏览器不支持window.crypto.getRandomValues(包括移动或桌面浏览器),如果有,我需要担心哪些?我很高兴得知有足够的支持,我不再需要担心回退方法,如果确实如此.
当我在各种浏览器中运行一些单元测试时,我今天遇到了一个奇怪的"bug".我在今天之前已经多次在Firefox中运行测试,甚至IE,但显然还不是Chrome(v19-dev).当我在Chrome中运行它时,它始终无法通过一次测试,因为我计算的两个值不匹配.
当我真正挖掘正在发生的事情时,我意识到问题是我假设如果我填充一个具有100,000个Math.random()值的数组,它们都将是唯一的(不会有任何冲突).事实证明,在Chrome中并非如此.
在Chrome中,我始终获得至少两对与100,000匹配的值.Firefox和IE9从未发生过冲突.这是我写的一个jsfiddle,用于测试它Math.random()在数组中创建1M 条目:http://jsfiddle.net/pseudosavant/bcduj/
有谁知道这是为什么用于Chrome的伪随机数生成器Math.random是真的不在于随机的?看起来这可能会对任何曾经使用的客户端js加密例程产生影响Math.random.
我想用 Javascript / jQuery 在页面上随机放置一个类的几个元素。我的想法是为 margin-top、margin-left 和 z-index 生成随机值。问题是我需要生成负值和正值之间的值(例如从 -150px 到 300px),我不明白如何使用我使用的代码来实现:
$(".randomnumber").each(function () {
var randomtop = Math.floor(Math.random() * 101);
var randomleft = Math.floor(Math.random() * 101);
var randomzindex = Math.floor(Math.random() * 101);
$(this).css({
"margin-top": randomtop,
"margin-left": randomleft,
"z-index": randomzindex
});
});
Run Code Online (Sandbox Code Playgroud)
http://jsfiddle.net/7JGqZ/651/
所以我遇到的问题:
不知道如何让它与负值一起工作——例如,我需要上边距从 -150px 到 300px。
小提琴中的元素有点奇怪,就像它们的位置不是真正随机的,或者它们彼此相连......
更新:
使它工作,但仍然不喜欢结果,我实际上希望元素随机放置,以便它们适合页面大小,我的意思是元素将放置在整个页面上,而不是超出边缘太远这一页。现在我有一个固定在页面中心的父元素(宽度和高度 = 0,顶部和底部 = 50%),我的想法是通过生成顶部和左边距来定位它的子元素,就像这样:
$(document).ready(function(){
$(".mood-img").each(function () {
var height = $(window).height();
var halfheight = height/2;
var margintop = halfheight-400;
var width = $(window).width();
var halfwidth = width/2;
var …Run Code Online (Sandbox Code Playgroud)