我对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>
我的代码现在是怎样的。它需要如何使其工作?
答案 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");
}