问题描述
没有内置的能力break
。forEach
要中断执行,您必须抛出某种异常。例如。
var BreakException = {};
try {
[1, 2, 3].forEach(function(el) {
console.log(el);
if (el === 2) throw BreakException;
});
} catch (e) {
if (e !== BreakException) throw e;
}
JavaScript 异常并不是非常漂亮。如果您确实需要在其中使用传统的for
循环,则可能更合适break
。
利用Array#some
相反,使用Array#some
:
[1, 2, 3].some(function(el) {
console.log(el);
return el === 2;
});
这是有效的,因为任何回调都会立即some
返回true
,以数组顺序执行, return true
,短路其余部分的执行。
some
,它的逆every
(将在 a 上停止return false
),并且forEach
都是 ECMAScript 第五版方法,需要将它们添加到Array.prototype
缺少它们的浏览器中。
解决方法
[1,2,3].forEach(function(el) {
if(el === 1) break;
});
如何使用forEach
JavaScript 中的新方法做到这一点?我试过了return;
,return false;
和break
。break
崩溃,return
除了继续迭代什么都不做。