切换语句输出 - JavaScript

时间:2018-05-31 08:01:23

标签: javascript switch-statement

我有一个问题,我似乎无法解决为什么答案是这样的。问题是当a的值为8时,下面的代码片段将输出。

var n = ""
switch(a) {
    case 8:
        n += "bra ";
    case 10:
        n = "jon";
    case 12:
        n += "ny";
}
console.log(n);

我的第一个猜测是“bra”,因为a = 8,输入将匹配第一个case语句,因此将“bra”连接到n。然而,解决方案将“jonny”作为答案。

有人可以解释一下我在这里缺少什么吗?我会非常感激。 请注意,我是初学者,所以我可能错过了一些微不足道的事情。

4 个答案:

答案 0 :(得分:3)

switch语句只是跳转到相应的case标签。就是这样。

因此,对于8,你得到:

switch(a) {

a8,因此请跳至case 8

    case 8:
嘿,这是我们的停止。继续在这里执行。

        n += "bra ";

"bra "附加到n

    case 10:

另一个标签。执行标签不会做任何事情。

        n = "jon";

n设为"jon"

    case 12:

另一个标签。继续。

        n += "ny";

"ny"附加到n

}

现在n"jonny"

如果您想在switch内停止执行,则需要明确break;

switch(a) {
    case 8:
        n += "bra ";
        break;
    case 10:
        n = "jon";
        break;
    case 12:
        n += "ny";
        break;  // technically redundant; this is the end of the switch block
}

这就是为什么您通常会在每break组语句后看到case

顺便说一句,这种行为称为“fallthrough”,并且是从C继承的。

答案 1 :(得分:2)

var n = "";
let a=8;
switch(a) {
    case 8:
        n += "bra ";
        break;
    case 10:
        n = "jon";
        break;
    case 12:
        n += "ny";
        break;
}
console.log(n);

要使switch生效,您需要break,如上所述。当它没有中断时,程序将从案例8一直向下流到案例12,导致下面的序列

//case 8:  n = ""+bra
//case 10: n = jon
//case 12: n = jon+ny

结果,n最后等于jonny

答案 2 :(得分:0)

需要注意的是,在JavaScript中,需要使用break语句来防止控制落入后续情况。

var n = ""
switch(a) {
    case 8:
        n += "bra ";  //n = "" + "bra " = "bra "
        //no break statement here, control falls through to the next case        
    case 10:
        n = "jon";    //n = "jon"
        //no break statement here, control falls through to the next case
    case 12:
        n += "ny";    //n = "jon" + "ny" = "jonny"
}
console.log(n);

答案 3 :(得分:-1)

由于没有使用break关键字,逻辑将从符合条件的那一个开始有效地“通过”所有交换机分支。 (Which you can read more about here)。

因此,在您的示例中,所有案例都将被处理。这与做:

相同
n += "bra ";
n = "jon";
n += "ny";

结果显然是:"jonny"

如果您只想处理所选的switch语句,则可以像这样添加break关键字:

switch(a) {
    case 8:
        n += "bra ";
        break;
    case 10:
        n = "jon";
        break;
    case 12:
        n += "ny";
        break;
}