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环境中允许使用,但对遍历无影响)