新手求教JavaScript代码逻辑:第3、4行功能及判断验证
你的JavaScript代码解析&理解纠正
先把你给出的代码完整贴出来方便分析:
var numarray = new Array(76); do { var rannum = Math.floor(Math.random() * 76) + 1; } while (numarray[rannum]); numarray[rannum] = true; document.getElementById(cellID)....
首先说整体功能:这是一段用来生成1到76之间不重复随机数的代码,大概率是用来做类似宾果游戏(Bingo)抽号码的场景~
接下来逐个拆解,重点说你关心的第3、4行:
第1行:
var numarray = new Array(76);
创建了一个长度为76的空数组,初始所有位置都是undefined(可以理解成“空的”)。这个数组的作用是记台账:用数组的下标对应1-76的数字,一旦某个数字被生成过,就把对应下标位置设为true,这样下次就知道这个数字已经用过了。第2-4行的
do-while循环(核心就是你问的第3、4行):- 第3行:
var rannum = Math.floor(Math.random() * 76) + 1;
这行是生成随机数的关键:Math.random()会生成一个0到1之间的小数,乘以76后变成0到76之间(不含76)的数,Math.floor()把它向下取整成0-75的整数,最后加1就得到了1-76之间的随机整数,存到rannum里。 - 第4行:
while (numarray[rannum]);
这是循环的“守门人”:它会检查numarray[rannum]这个位置的值。因为数组初始都是空的(undefined),如果这个数字还没被用过,numarray[rannum]就是undefined,会被判定为false,循环就停下来;如果这个数字已经被标记过(值为true),条件就为真,循环会重新跑一遍第3行,直到生成一个从来没被用过的随机数为止。
- 第3行:
第5行:
numarray[rannum] = true;
把刚生成的这个“新鲜”随机数对应的数组位置设为true,相当于在台账上打个勾:这个数字已经用过啦,以后别再选它了。最后一行
document.getElementById(cellID)....
这部分应该是把刚生成的随机数显示到页面上ID为cellID的元素里,比如宾果卡片的某个格子里。
再说说你之前的理解:
你说对了一半——代码确实会检查数组里有没有这个随机数,不存在就标记它(相当于“加入数组”);但如果数字存在的话,不会直接把它放到文档ID里,而是会重新生成随机数,直到拿到没被用过的那个,才会去处理页面元素哦~
内容的提问来源于stack exchange,提问作者jsnewbie112233
相关产品推荐
相关产品推荐

