繁体   English   中英

JavaScript切换与逻辑运算符?

[英]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 > 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;
}

但这并不是应该如何使用switch

改为使用if语句:

if (count == 2) {
    document.write("hi");
} else if (count > 3) {
    document.write("bye");
} else if (count >= 4) {
    document.write("lol");
}

编辑由于您只使用switch案例(如果案例匹配则中断),我的switchif / 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 >= 4count > 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM