我有一个问题,我似乎无法解决为什么答案是这样的。问题是当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”作为答案。
有人可以解释一下我在这里缺少什么吗?我会非常感激。 请注意,我是初学者,所以我可能错过了一些微不足道的事情。
答案 0 :(得分:3)
switch
语句只是跳转到相应的case
标签。就是这样。
因此,对于8
,你得到:
switch(a) {
a
为8
,因此请跳至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;
}