Javascript if / else语句不起作用

时间:2015-02-20 17:26:58

标签: javascript html

我对Javascript很新,似乎我没有正确理解if else语句。

我有一个脚本会让访问者访问4个网站中的1个,但我代码中的最后2个网站不起作用。

<script>

setTimeout(function() { 

var r = Math.random();
if(r > 0.49) {
window.location.replace("1.html");
}

else if(r < 0.48) {
window.location.replace("2.html");
}

if (r == 0.48){
    window.location.replace("maybe.html");
}

else if (r == 0.49){
    window.location.replace("4.html");
}

}, 1);
</script>

我的代码现在是怎样的。它需要如何使其工作?

2 个答案:

答案 0 :(得分:3)

更新

我原本说这看起来很好,但我刚注意到一个问题。 r > 0.48 && r < 0.49没有分支。此范围内的值(例如0.48342... ,我认为这不是你的意图。一个简单的0.48分支总是一个好主意,或者您应该明确地考虑这些情况。

原始

你的逻辑看起来很好。减少你的问题:

0.49
else

请注意,非常 非常 ,您不太可能会遇到最后两个条件中的任何一个。

答案 1 :(得分:2)

您可以用这两行替换整个代码块,它们将按您的要求执行:

var r = Math.floor(Math.random() * 4) + 1;
window.location.replace(r+".html");

<强>解释

您的代码实际上正在运行。问题是Math.random()返回的数字是0到1之间的随机数(it might be 0.5544718541204929),几乎不会是0.48或0.49,但几乎总是介于这两个数字之间。 / p>

更好的解决方案是:

var r = Math.floor(Math.random() * 4) + 1;

然后测试数字是1,2,3还是4。

示例:

jsFiddle演示 // jsFiddle暂时不保存小提琴

var r = Math.floor(Math.random() * 4) + 1;

if(r ==1) {
    alert("1.html");
}else if(r==2){
    alert("2.html");
}else if(r==3){
    alert("3.html");
}else{
    alert("4.html");
}

但不需要整个IF块。只需这样做:

var r = Math.floor(Math.random() * 4) + 1;
window.location.replace(r+".html");
//alert( r + ".html" );

回答此问题,作为评论提交:I want it to be page 1 and page 2 has is almost 50/50, and the last 2 is pretty rare

对于案例3和案例4,这将给出1%的赔率。

var r = Math.floor(Math.random() * 100) + 1; //return number between 1 and 100

if(r <=48) {
    alert("1.html");
}else if(r<=98){
    alert("2.html");
}else if(r==99){
    alert("3.html");
}else{ //r==100
    alert("4.html");
}

如果你想要稍高的赔率:

if(r <=40) { //40% chance
    alert("1.html");
}else if(r<=80){ //40% chance
    alert("2.html");
}else if(r<=90){ //10% chance
    alert("3.html");
}else{ //r is between 91 and 100, 10% chance
    alert("4.html");
}