Проблема:
Цикл
for...in
не предназначен для итерации по массиву, но предназначен для перечисления ключей объекта. Согласно документам по MDN :
for...in
не должен использоваться для перебора массива, где важен порядок индекса.
При использовании с массивами цикл обрабатывает массив как объект и рассматривает индексы как ключи (поэтому печатаются строковые ключи).
Быстрое исправление:
Проблема с вашим кодом состоит в том, что оператор for (var i in [1,2,3])
возвращает индексы массива как i
в теле цикла. Вы можете попробовать простое исправление в теле цикла:
var xs=[]; for (var i in [1,2,3]) xs.push([1,2,3][i]); console.log(xs);
Вы можете извлечь [1,2,3]
в переменную, чтобы сделать код более читабельным.
Рекомендуемое исправление:
Вместо этого используйте Array#forEach
. Он специально разработан для зацикливания массивов и стабилен во всех средах.
var xs=[]; [1,2,3].forEach(item => xs.push(item)); console.log(xs);