![](/img/trans.png)
[英]JS Logical operators - OR, AND ('||', '&&') in switch statement
[英]JavaScript switch with logical operators?
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;
}
}
因为它没有按照我期望的方式工作,而不是打印再见和大声笑,这让我觉得这在JavaScript中是无效的。 我试着寻找一些例子来看看人们是否在Google上这样做,我没有看到。 这是否有效? 或者为什么这不起作用?
解释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");
}
这是对Gumbo答案的修正。 我正在写一个单独的答案,因为这不适合作为评论。
编辑: Gumbo在评论中建议我可能误读了Doug的意图。 如果OP真的希望打印出“bye”和“lol”for count> = 4,那么我们需要从switch
删除一个break
。 这些案件现在按照原始顺序返回,因此“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真的想无论是 “笑”或“再见”来打印,但不能同时使用。)
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
声明仍然没有任何的权利,因为计数> = 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则为true
,否则为false
。 如果count
是一个浮点值,那就不是这种情况(但是,一个名为“count”的浮点值会引起其他问题。)
您以错误的方式使用case子句。 您应该提供一个值,该值将与switch子句中的值进行比较...而不是像此count>2
这样的布尔表达式
在这种情况下,这个布尔表达式将被强制转换为true或false(1或0)并与您的值计数进行比较,有时可能有效 - 有时 - 不是。
您应该考虑将其替换为if语句。
您应该更换最后两个案例。
switch
通常需要固定的条件/值; 因为你的count
变量每次都在变化,所以它与之相反。 请改用if-else
条件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.