JavaScript切换与逻辑运算符?

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 > 3count >= 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)


Dan*_*lau 5

这是对Gumbo答案的更正。我之所以写一个单独的答案只是因为这不适合作为评论。

编辑:浓汤在评论中建议我可能误解了道格的意图。如果OP真的希望这两个“再见”和“笑”被打印出来计数> = 4,那么我们就需要删除breakswitch。现在,这些案件又恢复了原始顺序,因此“ 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会产生两个 byelol的输出。同样,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 >= 4count > 3会产生相同的结果- true如果count> = 4,false否则。如果count是浮点值,则不是这种情况(但是,名为“ count”的浮点值会引起其他问题。)