for (var count = 1; count < 6; count++) {
switch (count) {
case (2): document.write("hi"); break;
case (count > 3): document.write("bye"); break;
case (count >= 4): document.write("lol"); break;
}
}
因为它没有按照我期望的方式工作,而不是打印再见和lol,这让我觉得这在JavaScript中是无效的。我试着寻找一些例子来看看人们是否在Google上这样做,我没有看到。这是否有效?或者为什么这不起作用?
答案 0 :(得分:86)
解释switch
时,括号中的表达式将与特定情况的值进行比较。
因此,在您的情况下,count
的值将与2
,count > 3
和count >= 4
的值进行比较。那是行不通的。虽然您可以重写它并与true
进行比较以使其正常工作:
switch (true) {
case (count == 2):
document.write("hi");
break;
case (count > 3):
document.write("bye");
break;
case (count >= 4):
document.write("lol");
break;
}
但这并不是switch
应该如何使用。
改为使用if
语句:
if (count == 2) {
document.write("hi");
} else if (count > 3) {
document.write("bye");
} else if (count >= 4) {
document.write("lol");
}
修改由于您独占使用switch
个案例(如果个案匹配则中断),我的switch
- 至 - if
/ else
翻译是正确的。
但count >= 4
case / branch永远不会应用,因为count > 3
对于大于或等于4的count
值为真(也是)。
要修复此问题(对于大于或等于4的值,请写“bye”和“lol”),删除最后一个else
以使最后if
个语句独立来自前面的:
if (count == 2) {
document.write("hi");
} else if (count > 3) {
document.write("bye");
}
if (count >= 4) {
document.write("lol");
}
答案 1 :(得分:5)
这是对Gumbo's answer的更正。我正在写一个单独的答案,因为这不适合作为评论。
编辑: Gumbo在评论中建议我可能误读了Doug的意图。如果OP真的希望打印出“bye”和“lol”以计数&gt; = 4,那么我们需要从break
中删除switch
。这些案件现在又恢复原状,因此“bye”和“lol”按此顺序打印(这显然是OP的意图。)
switch (true) {
case (count == 2):
document.write("hi");
break;
case (count > 3):
document.write("bye");
// No break here; just fall through.
case (count >= 4):
document.write("lol");
break;
}
在这种情况下,我同意Gumbo修改后的if
声明是正确的。
原始答案如下(假设OP确实希望
switch
语句Gumbo wrote不适用于count&gt; = 4,原因与Gumbo的原始if
语句不起作用的原因相同:因为案例是按顺序评估,count> = 4意味着将执行第二种情况(计数> 3);所以脚本永远不会达到计数&gt; = 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&gt; = 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
会产生相同的结果 - true
用于计数&gt ; = 4,false
否则。如果count
是一个浮点值,那就不是这种情况(但是,一个名为“count”的浮点值会引起其他问题。)
答案 2 :(得分:2)
您以错误的方式使用case子句。您应该提供一个值,该值将与switch子句中的值进行比较...而不是像这样的布尔表达式count>2
在这种情况下,这个布尔表达式将被强制转换为true或false(1或0)并与您的值计数进行比较,有时可能有效 - 有时 - 不是。
您应该考虑将其替换为if语句。
答案 3 :(得分:0)
您应该更换最后两个案例。
答案 4 :(得分:0)
switch
通常需要固定条件/值;因为你的count
变量每次都会改变,所以它与此相反。改为使用if-else
条件。