Почему пишется, что цикл for..in плох для переборки массивов?
На MDN пишется, что for..in плох для перебора массивов т.к. перебирает их в произвольном порядке, а для массивов важен порядок...
Цикл
for...inпроходит по свойствам в произвольном порядке.
Но также я увидел что это по этому поводу пишет learn.javascript:
Соглашение говорит, что если имя свойства – нечисловая строка, то такие ключи всегда перебираются в том же порядке, в каком присваивались. С другой стороны, если имя свойства – число или числовая строка, то все современные браузеры сортируют такие свойства в целях внутренней оптимизации.
Получается, что все числа, которые выступают в качестве ключей, for..in сортирует в порядке возрастания. Св-ва с нечисловыми строками будут перебраны в порядке добавления объект. Например:
//ключ-число
let objNum = {
4: 'e',
1: 'b',
3: 'd',
0: 'a',
2: 'c'
};
for(let key in objNum) {
console.log(key); //0, 1, 2, 3, 4
};
//ключ-строка
let objStr = {
d: 'fourth',
a: 'first',
b: 'second',
c: 'third'
};
for(let key in objStr) {
console.log(key); //d, a, b, c
};
Почему тогда говорится, что цикл for..in перебирает св-ва в произвольном порядке?