A função de retorno de chamada em Array.maptem três parâmetros:
Na mesma página do Mozilla à qual você vinculou:
o retorno de chamada é chamado com três argumentos: o valor do elemento, o índice do elemento e o objeto Array que está sendo percorrido. "
Portanto, se você chamar uma função parseIntque realmente espera dois argumentos, o segundo argumento será o índice do elemento.
Nesse caso, você acabou chamando parseIntcom as raízes 0, 1 e 2. O primeiro é o mesmo que não fornecer o parâmetro, portanto, padronizou com base na entrada (base 10, neste caso). A base 1 é uma base numérica impossível e 3 não é um número válido na 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
Portanto, neste caso, você precisa da função wrapper:
['1','2','3'].map(function(num) { return parseInt(num, 10); });
ou com a sintaxe do ES2015 +:
['1','2','3'].map(num => parseInt(num, 10));
(Nos dois casos, é melhor fornecer explicitamente um radical parseIntcomo mostrado, porque, caso contrário, ele adivinha o radical com base na entrada. Em alguns navegadores mais antigos, um 0 inicial fazia com que adivinhasse octal, o que tendia a ser problemático. adivinhe hex se a string começar com 0x.)
.map(parseFloat)porque leva apenas um parâmetro.