Array.forEach
нельзя взломать, и использование try...catch
или хакерских методов, таких как Array.every
или Array.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
. По состоянию на 18 июня 2016 года этот метод почти не доступен, и даже для 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. Также для тех, кто еще не использует эти большие библиотеки и ищет облегченные варианты, такие решения, как this, могут будет использоваться и будет почти на уровне ECMA6, сохраняя при этом совместимость со старыми браузерами.
person
Nicolas Bouvrette
schedule
18.06.2016