在javascript中,Switch case跳转到错误的case(如何正确使用break命令)
我的代码不是很长,所以我把它全部粘贴在这里 代码不完整,但当我运行它时,它首先跳转到它应该使用的case“start”,然后跳转到case“end”。我可以看到它,因为它打印两个块的控制台日志文本。为什么要跳到“终点”呢在javascript中,Switch case跳转到错误的case(如何正确使用break命令),javascript,switch-statement,Javascript,Switch Statement,我的代码不是很长,所以我把它全部粘贴在这里 代码不完整,但当我运行它时,它首先跳转到它应该使用的case“start”,然后跳转到case“end”。我可以看到它,因为它打印两个块的控制台日志文本。为什么要跳到“终点”呢 函数步骤流(流,步骤){ 开关(流[步]){ 案例“开始”: log(“开始读取流…”); 案例“结束”: var success=“已完成读取数据流。”; console.log(成功); 回归成功; 违约: 抛出“数据流格式不好”; 案例“手势”: log(“运行案例手势
函数步骤流(流,步骤){
开关(流[步]){
案例“开始”:
log(“开始读取流…”);
案例“结束”:
var success=“已完成读取数据流。”;
console.log(成功);
回归成功;
违约:
抛出“数据流格式不好”;
案例“手势”:
log(“运行案例手势!但为什么?”);
步骤+=1;
stepStream(stream,step);
案例“说”:
步骤+=1;
stepStream(stream,step);
案例“睡眠”:
步骤+=1;
stepStream(stream,step);
}
}
var sentence1=“我的香蕉在哪里?我以为你把它们放在我的包里了?”;
var sentence2=“这是一个相当令人恼火的情况。”;
var dataStream=[“开始”,“手势”,“版仔”,“睡眠”,1.0,“说”,句子1,
“说”,第2句,“手势”,“库比卡什”,“结束”];
stepStream(数据流,0)//第二个参数设置从何处开始读取数据流。
问题是您在案例
代码之后缺少break
关键字。如果没有中断,将执行后续块,这就是为什么end
在start
代码之后执行end
的原因。您可以在上阅读更多关于此的信息
此外,从:
与每个案例标签关联的可选break语句可确保
一旦匹配的语句被激活,程序就会跳出开关
在开关后面的语句处执行并继续执行。如果
如果省略break,程序将在下一个
switch语句中的语句
因此,您的代码应该如下所示:
function stepStream(stream,step){
switch (stream[step]){
case "start":
console.log("Started reading stream...");
break;
case "end":
var success = "Finished reading dataStream.";
console.log(success);
return success;
default:
throw "Data stream format is bad";
case "gesture":
//commUGesture(stream[i+1]);
//createLogLine("robot:CommU","event:gesture:"+stream[i+1]);
console.log("Running case gesture! But why?");
step+=1;
stepStream(stream,step);
break;
case "say":
step+=1;
stepStream(stream,step);
break;
case "sleep":
step+=1;
stepStream(stream,step);
break;
}
您的“end”案例在结尾有一个返回,因此代码不会落入其他案例。理想情况下,在每个代码的末尾都应该有一个中断。您忘记在开始块中添加中断语句,因此它会一直到结束块。问题很简单,所有的
开关案例
都必须以缺少的中断
或返回
语句结束
switch(var1)
{
case "start":
console.log("Started");
break;
case "end":
console.log("stopped");
return "";
.
.
.
}
代码将在第一个匹配的“case”处开始运行,但只有在达到“break”或“return”语句时才会停止运行 您需要在每个
案例的结尾处使用break
(除了那些已经以return
或throw
结尾的案例):。可能重复的是啊,好吧,明白了,但为什么我通过的唯一案例是“start”?却要进入“end”案例?因为您没有中断。之后的案例是否匹配并不重要。将执行所有代码,直到下一个中断(或返回、抛出)。我在回答中又补充了一些信息。希望有帮助!谢谢,切换功能感觉像是一个危险的功能,但使用起来并不真的,它已经成为一种习惯,在每种情况下,你使用它的次数越多,它就会被打破。就像放分号或括号一样。我相信你会发现它很有用:)
switch(var1)
{
case "start":
console.log("Started");
break;
case "end":
console.log("stopped");
return "";
.
.
.
}