一次性跳出while循环和switch语句

3

这个问题在C++中也有一个类似的问题,但我这里使用的是JavaScript。 实际上,我和其他帖子中的OP处于相同的情况。

var input = prompt();
while(true) {
    switch(input) {
        case 'hi':
        break;
        case 'bye':
            //I want to break out of the switch and the loop here
        break;
    }
    /*Other code*/
}

有没有什么方法可以做到这一点?

/*其他代码*/部分,我还有多个开关需要中断代码。

4个回答

6
您可以在JavaScript中使用标签与break语句。
var input = prompt();

outside:
while(true) {
    switch(input) {
        case 'hi':
        break;
        case 'bye':
            //I want to break out of the switch and the loop here
        break outside;
    }
    /*Other code*/
}

是的,那是我采用的一种解决方案,但当你有10个开关时,标签开始失去可读性 :) - unbindall
你确定你写的代码好吗?因为你有10个开关 ;) - Shomz
你的意思是你有10个不同的退出点/循环或者在switch语句中有10个退出点来终止相同的循环。如果是后者,那么没有什么阻止你多次跳转到同一个标签。 - Calummm
1
@Shomz 这是一个文字类游戏。我可能夸大了我所拥有的开关数量 :) - unbindall

4

将整个内容包装在函数里,然后你可以简单地使用return来同时退出。

var input = prompt();
(function () {
    while(true) {
        switch(input) {
            case 'hi':
            break;
            case 'bye':
            return;
        }
        /*Other code*/
    }
})();

1

这与C ++或大多数其他语言的答案相同。基本上,您只需添加一个标志,告诉循环它已完成。

var input = prompt();
var keepGoing = true;
while(keepGoing) {
    switch(input) {
        case 'hi':
            break;
        case 'bye':
            //I want to break out of the switch and the loop here
            keepGoing = false;
            break;
    }
    // If you need to skip other code, then use this:
    if (!keepGoing)  break;
    /*Other code*/
}

有意义吗?


您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - unbindall
这就是为什么在其余代码之前有额外检查的原因。请参见上文。 - Thought
当然,函数选项也非常好,非常符合JS的风格。 - Thought

0

不要为了“少一行代码”而降低可读性。让你的意图清晰明了:

while (true) {
  var quit = false;

  switch(input) {
    case 'hi':
      break;

    case 'bye':
      quit = true;
      break;
  }

  if (quit)
    break;

  /*Other code*/
}

Thought的解决方案与此相同:我有多个开关,因此重复使用if语句来检查值是不切实际的。 - unbindall

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接