在for循环中想要跳出整个循环使用break;但是在forEach中使用break不仅不能调出整个循环,还会报错,使用return也不行。
// for循环跳出
for (var i = 0; i < 5; i++){
console.log(i);
if(i == 3){// 当i=3时,跳出循环
break;
}
}
/* 控制台输出
log: 0
log: 1
log: 2
log: 3
*/
// forEach使用break跳出(报错)
[1,2,3,4,5,6].forEach(item=>{
console.log(item);
if(item == 4) break;
})
/*
控制台报错:Uncaught SyntaxError: Illegal break statement
*/
// forEach使用return跳出(无效)
[1,2,3,4,5,6].forEach(item=>{
console.log(item);
if(item == 4) return;
})
/* 控制台输出
log: 1
log: 2
log: 3
log: 4
log: 5
log: 6
*/
一、try…catch配合throw跳出循环
// 当符合某一条件时,提出错误,try...catch捕获到之后,forEach将跳出循环
try{
let list = [1, 2, 3, 4, 5];
list.forEach(el => {
console.log(el);
if(el == 3) {
throw new Error('finish');
}
})
}catch(e) {
console.log(e.message);
}
/* 控制台输出
log: 1
log: 2
log: 3
finish
*/
二、every()
语法糖:every()返回一个boolean,判断每个元素是否符合func条件。数组里面所有的元素都符合才返回true。
当条件满足时使用return false 跳出循环,其余不符合条件时需要使用return true 继续循环。
let list = [1, 2, 3, 4, 5];
list.every(el => {
if(el == 3) {
console.log(el);
return false;
}else {
console.log(el);
return true;
}
})
/* 控制台输出
log: 1
log: 2
log: 3
*/
三、some()
语法糖:some()返回一个boolean,判断是否有元素是否符合func条件。数组里面所有的元素有一个符合条件就返回true。
当条件满足时使用return true 跳出循环,否则一直循环到结束。
let list = [1, 2, 3, 4, 5];
list.some(el => {
console.log(el);
if(el == 3) {
return true;
}
})
/* 控制台输出
log: 1
log: 2
log: 3
*/