Почему пишется, что цикл 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 перебирает св-ва в произвольном порядке?


Ответы (0 шт):