Firebug представляет (new Array(N)) как массив с N undefined в нем. Недавно я столкнулся с сценарием, который показал, что размерный массив со всеми значениями undefined в нем отличается от нового сконструированного массива размера. Я хотел бы понять разницу.
Предположим, вы хотите сгенерировать список случайных чисел от 0 до 1000.
function kilorange() {
return Math.floor(Math.random() * (1001));
}
no_random_numbers = (new Array(6)).map(kilorange);
my_random_numbers = [undefined, undefined, undefined,
undefined, undefined, undefined].map(kilorange);
Я бы ожидал, что no_random_numbers и my_random_numbers будут эквивалентными, но это не так. no_random_numbers - это еще один массив из undefined s, тогда как my_random_numbers - массив с шестью случайными целыми числами. Кроме того, после того, как вы сбросили инструкцию console.count в kilorange, я узнал, что моя функция никогда не вызывается для массива, созданного с помощью конструктора Array.
В чем разница и почему map (и, предположительно, другие итерационные методы) не обрабатывают вышеуказанные массивы одинаково?