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 undefined
hará 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 undefined
propiedad explícita en un objeto y una propiedad que falta:
var x = { }, y = { z: undefined };
if (x.z === y.z) // true
El objeto x
no tiene una propiedad llamada "z", y el objeto y
sí. 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 length
realiza 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.