如果条件有一半时间,javascript中的for循环正在跳过其他

kid*_*ept 1 javascript

我只是在摆弄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

Poi*_*nty 9

你的代码调用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)