Str*_*rry 37 javascript switch-statement
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;
}
}
Run Code Online (Sandbox Code Playgroud)
因为它没有按照我期望的方式工作,而不是打印再见和lol,这让我觉得这在JavaScript中是无效的.我试着寻找一些例子来看看人们是否在Google上这样做,我没有看到.这是否有效?或者为什么这不起作用?
Gum*_*mbo 97
当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;
}
Run Code Online (Sandbox Code Playgroud)
但这不switch应该如何使用.
if改为使用语句:
if (count == 2) {
document.write("hi");
} else if (count > 3) {
document.write("bye");
} else if (count >= 4) {
document.write("lol");
}
Run Code Online (Sandbox Code Playgroud)
编辑 既然你使用的switch情况下,专门(如果突破的情况下比赛),我switch-到- if/ else翻译是正确的.
但是count >= 4case/branch永远不会被应用,因为count > 3对于count大于或等于4的值是真的(也是).
要解决此问题(对于大于或等于4的值,请写"bye" 和 "lol"),删除最后一个else以使最后一个if语句与前面的语句无关:
if (count == 2) {
document.write("hi");
} else if (count > 3) {
document.write("bye");
}
if (count >= 4) {
document.write("lol");
}
Run Code Online (Sandbox Code Playgroud)
这是对Gumbo答案的更正。我之所以写一个单独的答案只是因为这不适合作为评论。
编辑:浓汤在评论中建议我可能误解了道格的意图。如果OP真的希望这两个“再见”和“笑”被打印出来计数> = 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;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我同意Gumbo的观点,认为修改后的if说法是正确的。
原来的答案如下(假设OP真的想无论是 “笑”或“再见”来打印,但不能同时使用。)
Gumbo编写的switch语句不适用于count> = 4,其原因与Gumbo原始语句无效的原因大致相同:由于案例是按顺序求值的,因此count> = 4表示第二个案例(count> 3 )将被执行;因此该脚本将永远无法达到计数> = 4的测试。要解决此问题,应该以相反的顺序执行测试,从最高到最低:if
switch (true) {
case (count >= 4):
document.write("lol");
break;
case (count > 3):
document.write("bye");
break;
case (count == 2):
document.write("hi");
break;
}
Run Code Online (Sandbox Code Playgroud)
修正后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");
}
Run Code Online (Sandbox Code Playgroud)
这不是一个理想的示例,因为如果count是整数,则求值count >= 4并count > 3会产生相同的结果- true如果count> = 4,false否则。如果count是浮点值,则不是这种情况(但是,名为“ count”的浮点值会引起其他问题。)
| 归档时间: |
|
| 查看次数: |
62385 次 |
| 最近记录: |