No es un error Así es como se define el constructor Array para trabajar.
De MDC:
Cuando especifica un único parámetro numérico con el constructor de matriz, especifica la longitud inicial de la matriz. El siguiente código crea una matriz de cinco elementos:
var billingMethod = new Array(5);
El comportamiento del constructor de matriz depende de si el parámetro único es un número.
El .map()método solo incluye en la iteración elementos de la matriz que tienen valores asignados explícitamente. Incluso una asignación explícita de undefinedhará que un valor se considere elegible para su inclusión en la iteración. Eso parece extraño, pero es esencialmente la diferencia entre una undefinedpropiedad explícita en un objeto y una propiedad que falta:
var x = { }, y = { z: undefined };
if (x.z === y.z) // true
El objeto xno tiene una propiedad llamada "z", y el objeto ysí. Sin embargo, en ambos casos parece que el "valor" de la propiedad es undefined. En una matriz, la situación es similar: el valor de lengthrealiza implícitamente una asignación de valor a todos los elementos desde cero hasta length - 1. La .map()función por lo tanto no va a hacer nada (no llamará a la devolución de llamada) cuando se le llama en una serie de nueva construcción con el constructor Array y un argumento numérico.
var y = x.map(function(){return 0; });, y obtengo esto tanto para el nuevo método Array () como para la matriz literal. Probé en Firefox 4 y Chrome.