JavaScript forEach循环中如何实现continue跳过当前迭代
问题原因
forEach是数组原型上的遍历方法,它接收的参数是独立的回调函数,本身不属于JavaScript语法层面的迭代语句(比如for、for...of、while这类),回调内部不存在迭代语句上下文,因此直接写continue会抛出如下语法错误:
SyntaxError[ ... ]: Illegal continue statement: no surrounding iteration statement
这个报错和传入的是普通function函数还是箭头函数无关,只要在forEach的回调里直接使用continue就会触发。
forEach内实现continue等效效果的方案
除了用反向条件包裹待执行逻辑的写法外,最直接的实现方式是在回调函数内使用return提前终止当前次回调执行:return语句之后的本次回调逻辑不会运行,遍历会直接进入下一个元素的处理,效果和continue完全一致。
示例代码:
const values = [1, 2, 3, 4, 5]; values.forEach((value) => { if (value === 3) { return; // 跳过value=3时的后续逻辑,等效continue } console.log(value); })
运行输出:
1 2 4 5
补充建议
如果遍历过程中需要频繁使用continue、break这类流程控制关键字,更推荐直接使用原生支持流程控制的循环语法,比如for...of、普通for循环,写法更符合语义,也不会出现语法兼容问题:
const values = [1, 2, 3, 4, 5]; for (const value of values) { if (value === 3) { continue; } console.log(value); }
注意:
forEach回调里的return仅能实现continue的效果,无法实现break终止整个遍历的需求,如果需要中途终止遍历,建议换用原生循环,或者借助some/every方法的返回值特性实现。
内容的提问来源于stack exchange,提问作者Chris Collett
相关产品推荐
相关产品推荐

