JavaScript-循环&中断简述

303 阅读1分钟

1. for循环

break

下面我们来看一个break的例子。

var arr = [1,2,3];

for(var i = 0, len = arr.length; i < len; i += 1){
    for(var j = 0; j < 3; j++){
        if(j === 1){
            break;
        }
        console.log(arr[i]+'-'+j);
    }
}

// 1-0
// 2-0
// 3-0

当前的break退出了第二层循环,我们可以再第一层循环处添加label标签,使得break退出第一层循环。

var arr = [1,2,3];

start: for(var i = 0, len = arr.length; i < len; i += 1){
  for(var j = 0; j < 3; j++){
      if(j === 1){
          break start;
      }
      console.log(arr[i]+'-'+j);
  }
}

// 1-0

continue

下面是continue的例子:

for(var i = 0, len = arr.length; i < len; i += 1){
  for(var j = 0; j < 3; j++){
      if(j === 1){
        continue;
      }
      console.log(arr[i]+'-'+j);
  }
}

// 1-0
// 1-2
// 2-0
// 2-2
// 3-0
// 3-2

continue停止当前循环的执行,继续下一次循环(都是针对第二层),我们可以再第一层循环处添加label标签,使得continue停止第一层当前的循环。

start: for(var i = 0, len = arr.length; i < len; i += 1){
  for(var j = 0; j < 3; j++){
      if(j === 1){
        continue start;
      }
      console.log(arr[i]+'-'+j);
  }
}

// 1-0
// 2-0
// 3-0

return

for循环里不能有return!否则会出现如下的错误:Uncaught SyntaxError: Illegal return statement

2. forEach

return

forEach中调用return,会结束本次循环,进入下一次循环。

var arr = [1,2,3];

arr.forEach(function(value,index) {
    if(index === 1){
        return;
    }
    console.log(arr[index])
});

// 1
// 3

break & continue

forEach循环里不能有break||continue!否则会出现如下的错误:Uncaught SyntaxError: Illegal break statement

3. Array.map

同上的forEach

4. for...in

break

break对遍历无影响

var arr = [1,2,3];
for(var i in arr){
  if(i === 1){
    break
  }
  console.log(i)
}

// 0
// 1
// 2

continue

continue对遍历无影响

var arr = [1,2,3];
for(var i in arr){
  if(i === 1){
    continue
  }
  console.log(i)
}

// 0
// 1
// 2

return

for...in 当在浏览器中执行时,有return时会报错:Uncaught SyntaxError: Illegal return statement在node中,会正常执行,但对遍历无影响。

5. for...of

break

break会跳出当前的循环

var arr = [1,2,3];

for(var i of arr){
    if(i === 2){
        break
    }
    console.log(i)
}

// 1

continue

continue停止当前循环的执行,继续下一次循环

var arr = [1,2,3];

for(var i of arr){
    if(i === 2){
      continue
    }
    console.log(i)
}

// 1
// 3

return

循环里不能有return!否则会出现如下的错误:Uncaught SyntaxError: Illegal return statement

6. while

return

循环里不能有return!否则会出现如下的错误:Uncaught SyntaxError: Illegal return statement

break

break会跳出当前的循环

var a = 10;
while (a > 0) {
  if (a === 8) {
    break;
  }
  console.log('a:', a);
  a--;
}

// 10
// 9

continue

continue会跳出当前的循环

var a = 10;
while (a > 0) {
  if (a === 8) {
    continue;
  }
  console.log('a:', a);
  a--;
}

// 10
// 9

7. do...while

return

循环里不能有return!否则会出现如下的错误:Uncaught SyntaxError: Illegal return statement

break

break会跳出当前的循环

var i = 0;
do {
  i++;
  if (i === 3) {
    break;
  }
  console.log('i:', i);
} while (i < 5);

// i: 1
// i: 2

continue

continue会跳出当前的循环

var i = 0;
do {
  i++;
  if (i === 3) {
    continue;
  }
  console.log('i:', i);
} while (i < 5);

// i: 1
// i: 2
// i: 4
// i: 5

总结

允许使用break & continue,不使用return

  • for循环
  • for...in(break & continue对遍历无影响)
  • for...of
  • while
  • do...while

允许使用return,不使用break & continue

  • forEach
  • Array.map
  • for...in(node环境中允许使用,但对遍历无影响)

参考链接