29

我必须使用什么命令才能退出 for 循环,也可以从//code inside直接跳转到//code after

//code before
for(var a in b)
    {
    switch(something)
        {
        case something:
            {
            //code inside
            break;
            }
        }
    }
//code after
4

8 回答 8

27

需要退出时使用另一个变量进行标记:

var b = { firstName: 'Peter', lastName: 'Smith' };
var keepGoing = true;
for (var a in b) {
  switch (true) {
    case 1:
      keepGoing = false;
      break;
  }
  if (!keepGoing) break;
  console.log('switch end');
}
console.log('for end');

例子

于 2013-06-12T18:25:57.997 回答
26

您可以使用label. 有一个带标签的声明并打破该标签。outerLoop是我在这里使用的标签。

//code before
outerLoop:
for (var a in b) {
    switch (something) {
        case 'case1':
            //code inside
            break outerLoop;
    }
}
//code after
于 2013-06-12T18:27:44.220 回答
19

不幸的是,Javascript 不允许break通过多个级别。return最简单的方法是通过创建匿名函数来利用语句的强大功能:

//code before
(function () {
    for (var a in b) {
        switch (something) {
        case something:
            {
                //code inside
                return;
            }
        }
    }
}());
//code after

这是有效的,因为return离开了函数,因此隐式地离开了循环,让你直接进入code after


正如评论中所指出的,我的上述答案是不正确的,并且可以进行多级break处理,就像我赞成的 Chubby Boy 的答案一样。

从七年后的角度来看,这是否明智有些疑问。

于 2013-06-12T18:29:07.067 回答
9

这取决于你想要完成什么......我经常做的一件事是这样的:

    //code before
for(var a in b)
{
    var breakFor = false;
    switch(something)
    {
        case something:
        {
            //code inside
            breakFor = true;
            break;
        }
    }
    if (breakFor)
        break;
}
//code after
于 2013-06-12T18:26:44.317 回答
2

您可以判断要中断哪个循环/开关。

function foo ()
{
    dance:
    for(var k = 0; k < 4; k++){
        for(var m = 0; m < 4; m++){
            if(m == 2){
                break dance;
            }
        }
    }
}

看到这个答案

于 2013-06-12T18:29:56.463 回答
1

switch用一系列if语句替换您的。

for (const a of b) {
  if (something === someValue) {
    // code inside
    break; // break out of the for loop
  } else if (something === someOtherValue) {
    // etc.
  }
}
于 2021-09-30T08:53:39.267 回答
1
for(var i=0; i<b.length; i++) {
   switch (something) {
       case 'something1':
           i=b.length;
   }
}

当迭代变量i到达循环的末尾时,它会中断。但是可以强制迭代变量到达循环的末尾。

于 2017-03-04T15:44:50.517 回答
0

我总是发现使用条件语句是控制代码流的最简单方法之一,至少在概念上是这样。

var done = false;
//code before for loop
for(var a in b){
    switch(switchParameter){
        case firstCase:
            //code inside
            done = true;
            break;
        }
    }
    if(done)
        break;
}
//code outside of for loop
于 2013-06-12T18:29:07.597 回答