La función de devolución de llamada Array.maptiene tres parámetros:
Desde la misma página de Mozilla que ha vinculado a:
la devolución de llamada se invoca con tres argumentos: el valor del elemento, el índice del elemento y el objeto Array que se atraviesa ".
Entonces, si llama a una función parseIntque realmente espera dos argumentos, el segundo argumento será el índice del elemento.
En este caso, terminó llamando parseIntcon radix 0, 1 y 2 a su vez. El primero es lo mismo que no proporcionar el parámetro, por lo que está predeterminado en función de la entrada (base 10, en este caso). La base 1 es una base numérica imposible, y 3 no es un número válido en la base 2:
parseInt('1', 0); // OK - gives 1
parseInt('2', 1); // FAIL - 1 isn't a legal radix
parseInt('3', 2); // FAIL - 3 isn't legal in base 2
Entonces, en este caso, necesita la función de envoltura:
['1','2','3'].map(function(num) { return parseInt(num, 10); });
o con la sintaxis ES2015 +:
['1','2','3'].map(num => parseInt(num, 10));
(En ambos casos, es mejor suministrar explícitamente una raíz parseIntcomo se muestra, porque de lo contrario adivina la raíz en función de la entrada. En algunos navegadores más antiguos, un 0 inicial hizo que adivine octal, lo que tendió a ser problemático. adivina hexadecimal si la cadena comienza con 0x)
.map(parseFloat)porque toma un solo parámetro.