我只是在摆弄javascript而且我使用Math.random编写了函数,我认为它会返回一个硬币翻转.然后我很好奇,所以我通过一个循环来测试它翻转true/false的频率.我发现我的循环正在跳过大约一半的其他条件,并且能够通过在错误var中捕获它们来验证这一点.那么,为什么这样做呢?
var truths = 0;
var alternativetruths = 0;
var errors = 0;
function game() {
var score = Math.random()*10;
return score>5;
}
for(i=0;i<999999;i++) {
if (game() === true) {
truths++
} else if (game() === false) {
alternativetruths++
} else {
errors++
}
}
console.log("truths:",truths,"alternativetruths:",alternativetruths,"errors:",errors)
Run Code Online (Sandbox Code Playgroud)
真相:500393 alternativetruths:249580错误:250026
你的代码调用game() 两次.如果第一个呼叫不是 true,那么第二个呼叫可能会也可能不会true.
只需调用game()一次并将结果分配给变量.不要与trueand 进行明确的比较false; if语句可以解决布尔值,并且您的函数已经返回其中一个.
for (var i = 0; i < 999999; i++) {
var result = game();
if (result)
truths++;
else
alternativetruths++;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
491 次 |
| 最近记录: |