Не помилка. Ось так визначається конструктор Array.
Від MDC:
Коли ви вказуєте єдиний числовий параметр з конструктором Array, ви вказуєте початкову довжину масиву. Наступний код створює масив з п'яти елементів:
var billingMethod = new Array(5);
Поведінка конструктора масиву залежить від того, чи є єдиний параметр числом.
.map()
Метод включає в себе тільки в ітераційних елементах масиву , які явно мали значення , присвоєне. Навіть явне присвоєння значення undefined
призведе до того, що значення вважатиметься прийнятним для включення в ітерацію. Це здається дивним, але це по суті різниця між явним undefined
властивістю на об'єкті і відсутнім властивістю:
var x = { }, y = { z: undefined };
if (x.z === y.z) // true
Об'єкт x
не має властивості під назвою "z", а об'єкт y
має. Однак в обох випадках виявляється, що "цінність" властивості є undefined
. У масиві ситуація аналогічна: значення дій length
неявно виконує присвоєння значення всім елементам від нуля до кінця length - 1
. Таким .map()
чином, функція не буде робити нічого (не буде викликати зворотний виклик), коли буде викликана масив, щойно побудований з конструктором Array та числовим аргументом.
var y = x.map(function(){return 0; });
, і я отримую це як для нового методу Array (), так і для літералу масиву. Я тестував Firefox 4 і Chrome.