javascript - javascript中switch case跳转到错误的case(如何正确使用break命令)

标签 javascript switch-statement

我的代码不是很长,所以我把它全部粘贴在这里。

代码不完整,但当我运行它时,它首先跳转到它应该跳转到的案例“开始”,然后跳转到案例“结束”。我可以看到它,因为它打印了两个 block 的控制台日志文本。为什么要跳到“结束”案例?

<html>
    <body>
        <script>
            function stepStream(stream,step){
                switch (stream[step]){
                    case "start":
                        console.log("Started reading stream...");
                    case "end":
                        var success = "Finished reading dataStream.";
                        console.log(success);
                        return success;
                    default:
                        throw "Data stream format is bad";                  
                    case "gesture":
                        console.log("Running case gesture! But why?");
                        step+=1;
                        stepStream(stream,step);
                    case "say":
                        step+=1;
                        stepStream(stream,step);
                    case "sleep":
                        step+=1;
                        stepStream(stream,step);
                }

            }

            var sentence1 = "Where are my bananas? I thought you put them in my bag?";
            var sentence2 = "This is a rather irritating situattion.";  
            var dataStream = ["start","gesture","banzai","sleep",1.0,"say",sentence1,
                                "say",sentence2,"gesture","kubikasige","end"];
            stepStream(dataStream,0);//Second parameter sets where to start reading the dataStream.


        </script>
    </body>
</html>

最佳答案

问题是您在 case 代码之后缺少 break 关键字。如果没有中断,后续 block 将被执行,这就是为什么 endstart 代码之后执行的原因。您可以在 this W3Schools link 上阅读更多相关信息.

此外,来自 JS reference :

The optional break statement associated with each case label ensures that the program breaks out of switch once the matched statement is executed and continues execution at the statement following switch. If break is omitted, the program continues execution at the next statement in the switch statement.

所以你的代码应该是这样的:

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;
                }

你的“结束”案例在最后有一个返回,因此代码不会落入其他案例。理想情况下,每个末尾都应该有一个 break

关于javascript - javascript中switch case跳转到错误的case(如何正确使用break命令),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48857035/

相关文章:

javascript - 从 web worker 发布数据后的引用

javascript - 如何在 LoopBack 2.0 中隐藏 REST API 方法?

java - 通知不显示

java - 静态整数的 Switch 语句错误

javascript - Chrome 安装 Service Worker addAll 无法获取

javascript - 您可以将多个单独的列表保存到 localStorage 吗?

java - Java 中的基本对话框

java - 在 case 条件下使用 char 的 switch 语句?

java switch case无法解析为变量

javascript - pickadate.js 根本不工作