这是对Gumbo的回答的更正。我写了一个独立的回答,只是因为这不能作为评论。
编辑:Gumbo在评论中建议我可能误读了Doug的意图。如果原始帖子确实希望在计数 >= 4 时打印出 "bye" 和 "lol",那么我们需要从 switch
语句中移除一个 break
。现在,案例恢复到原始顺序,以便按照"bye"和"lol"的顺序打印(这显然是原始帖子的意图。)
switch (true) {
case (count == 2):
document.write("hi");
break;
case (count > 3):
document.write("bye");
case (count >= 4):
document.write("lol");
break;
}
在这种情况下,我同意Gumbo的修改后的
if
语句是正确的。
原始答案如下(假设OP确实希望打印"lol"或"bye"中的一个,但不是两者都打印。)
Gumbo编写的switch
语句对于count >= 4是行不通的,与Gumbo的原始
if
语句的原因相同:因为按顺序评估案例,count >= 4意味着将执行第二个案例(count > 3);因此脚本永远不会达到count >= 4的测试。要解决此问题,应该按相反的顺序执行测试,从高到低:
switch (true) {
case (count >= 4):
document.write("lol");
break;
case (count > 3):
document.write("bye");
break;
case (count == 2):
document.write("hi");
break;
}
经过修改的 if
语句仍然不正确,因为对于 count >= 4,它将在输出中产生 两个 代码行: bye
和 lol
。再次强调,if
梯形内的测试应按从高到低的顺序排列:
if (count >= 4) {
document.write("lol");
} else if (count > 3) {
document.write("bye");
} else if (count == 2) {
document.write("hi");
}
这不是一个理想的例子,因为如果count
是一个整数,那么评估count >= 4
和count > 3
将产生相同的结果--对于count >= 4
,false
的情况除外。 如果count
是浮点值,则情况就会有所不同(但是,命名为“count”的浮点值会引起其他问题)。