Usando Chrome Console, esta es mi entrada y salida:
[0].map(Array); [[0, 0, [0]]]; // output¿Que está sucediendo aquí?
EDITAR
La razón por la que esto me da curiosidad es porque algo como
[0].map(String);volveré
["0"];Y no
["0", "0", "String"]La función .map() está llamando a la función Array() con tres argumentos, el valor del elemento de la matriz que es 0 , el índice de ese elemento, también 0 , y una referencia a toda la matriz.
Entonces es como hacer esto:
var a = [0]; var index = 0 Array(a[index], index, a); // create array with three elements La matriz devuelta por Array() se convierte en el primer elemento de la matriz que crea .map() , de ahí el nivel adicional de anidamiento en su resultado [[0, 0, [0]]] .
EDITAR con respecto a su edición: cuando dice [0].map(String); eso da como resultado que se llame a String() con los mismos tres argumentos como String(a[index], index, a) , pero la función String() ignora todos menos el primer argumento, mientras que Array() usa todos los argumentos proporcionados.
En primer lugar , Array podría usarse como una función para crear matrices:
var arr = Array(1, 2, "Hello"); console.log(arr); // [1, 2, "Hello"] En segundo lugar , el map pasa tres parámetros a su devolución de llamada: el elemento, su índice de la matriz y la propia matriz.
Entonces , dado que su matriz contiene un elemento, la línea:
[0].map(Array);es equivalente a:
[Array(0, 0, [0])]; // the element 0 in the original array will be mapped into Array(0, 0, [0])Después de actualizar la pregunta. Otras respuestas le brindan información sobre el mapa
Para responder por qué la matriz y la cadena difieren, busque constructores
El constructor de cadenas acepta 1 parámetro Cadena (cosa) mientras que la matriz es nueva Array (elemento 0, elemento 1 [, ... [, elemento N]])