ForEach循环是否允许使用break和continue ?
Does the ForEach loop allow using break and continue?
ForEach
循环允许我们使用break
和continue
吗?
我已经尝试使用两个,但我收到一个错误:
Illegal break/continue statement
如果允许,我如何使用它们?
不,它没有,因为你传递了一个回调作为返回,它作为一个普通函数执行。
让我说清楚:
var arr = [1,2,3];
arr.forEach(function(i) {
console.log(i);
});
// is like
var cb = function(i) {
console.log(i);
// would "break" here do anything?
// would "continue" here do anything?
// of course not.
}
for(var j = 0; j < arr.length; j++) {
cb(arr[j]);
}
所有forEach所做的就是调用一个真实的,实际的函数,忽略它如何退出,然后在下一个元素上再次调用它。
在该回调函数中,如果您返回它将顺便在forEach
的情况下像continue
一样工作。因为函数的其余部分不会执行,它会再次被调用。没有break.
的类似物
Ruby支持这种灵活性,使用block/procs而不是method/lambdas。
根据Mozilla的文档:
注意:没有办法停止或中断forEach循环。解决方案是使用Array。every或Array.some。
every
和some
与forEach
完全相同,除了它们关注回调的返回值。every
会在假值时断开,some
会在真值时断开,因为它们会短路。它们与&&
和||
完全相似。&&
测试每个表达式是否为真,||
测试某些是否为真,这应该有助于您记住every
和some
的短路工作原理。
如前所述,您不能在JavaScript Array.prototype.forEach
循环中使用continue
或break
。但是,还有其他选项:
选项1
使用jQuery的.each()
函数(参考)
只需return true
to 继续,或者return false
to 中断循环。
选项2
只需使用return
来继续或throw new Error()
来中断。我并不一定推荐这样做,但知道这是可能的是很有趣的。
try {
[1, 2, 3, 4].forEach(function(i) {
if (i === 2) {
return; // continue
}
if (i === 3) {
throw new Error(); // break
}
console.log(i);
});
}
catch (e) {
}
预期结果只是1
- 使用while循环+break是一种可接受的方式;goto;手术的结束
- JavaScript:模拟'break'内部'foreach'环
- Mustache js line break
- 使用'break'在带有if语句的javascript开关中
- 我如何确保php到js的字符串获胜't break
- json-break-html中的特殊字符
- 如何在 JavaScript 循环中使用 break 语句
- jQuery break out of table
- 为什么 JS 中不允许每个函数的“break”
- js setTimeout recursion return-continue
- javascript break down VIN number
- 尝试在嵌套的 ifelse 语句中调用 break
- AngularJs - transclude break the ng-controller
- 测试正则表达式时,将忽略 Continue 语句
- 执行'continue'和'break'语句与for一起工作..在里面
- 可在标签上加上“continue”;和“;break"跳到其他语句
- break和continue语句最终导致了Nashorn中的块执行
- javascript中的continue/break有问题
- ForEach循环是否允许使用break和continue ?
- 在jQuery中使用break和continue