在Javascript中从switch case的内部中断循环

BAS*_*LIO 21 javascript for-loop continue switch-statement

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

//code before
for(var a in b)
    {
    switch(something)
        {
        case something:
            {
            //code inside
            break;
            }
        }
    }
//code after
Run Code Online (Sandbox Code Playgroud)

Bra*_*tie 23

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

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');
Run Code Online (Sandbox Code Playgroud)

  • @downvoter:给出了什么?完全可以接受(虽然`break`允许使用`label`参数,但我个人认为标签出了BASIC而且只是导致[spaghetti code](http://en.wikipedia.org/wiki/Spaghetti_code)...) (2认同)

Sab*_*kar 19

你可以用label.有标签声明并打破该标签.outerLoop是我在这里使用的标签.

//code before
outerLoop:
for (var a in b) {
    switch (something) {
        case 'case1':
            //code inside
            break outerLoop;
    }
}
//code after
Run Code Online (Sandbox Code Playgroud)


lon*_*day 15

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

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

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


小智 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
Run Code Online (Sandbox Code Playgroud)