Array.forEach
不能被破坏和使用try...catch
或 hacky 方法,例如Array.every
orArray.some
只会使您的代码更难理解。这个问题只有两种解决方案:
1)使用旧for
循环:这将是最兼容的解决方案,但在大块代码中经常使用时可能很难阅读:
var testArray = ['a', 'b', 'c'];
for (var key = 0; key < testArray.length; key++) {
var value = testArray[key];
console.log(key); // This is the key;
console.log(value); // This is the value;
}
2)在兼容性不成问题的情况下使用新的ECMA6(2015规范)。请注意,即使在 2016 年,也只有少数浏览器和 IDE 能够很好地支持这一新规范。虽然这适用于可迭代对象(例如数组),但如果您想在不可迭代对象上使用它,则需要使用该Object.entries
方法。这种方法在 2016 年 6 月 18 日几乎不可用,甚至 Chrome 也需要一个特殊的标志来启用它:chrome://flags/#enable-javascript-harmony
. 对于数组,您不需要所有这些,但兼容性仍然是一个问题:
var testArray = ['a', 'b', 'c'];
for (let [key, value] of testArray.entries()) {
console.log(key); // This is the key;
console.log(value); // This is the value;
}
3)很多人会同意第一个或第二个选项都不是好的候选人。在选项 2 成为新标准之前,大多数流行的库(例如 AngularJS 和 jQuery)都提供了自己的循环方法,这些方法可以优于 JavaScript 中可用的任何方法。同样对于那些还没有使用这些大型库并且正在寻找轻量级选项的人来说,可以使用这样的解决方案,并且几乎可以与 ECMA6 相提并论,同时保持与旧浏览器的兼容性。