Функция обратного вызова в Array.mapимеет три параметра:
С той же страницы Mozilla, на которую вы ссылались:
обратный вызов вызывается с тремя аргументами: значением элемента, индексом элемента и объектом Array, по которому выполняется обход. "
Так что если вы вызываете функцию, parseIntкоторая на самом деле ожидает два аргумента, вторым аргументом будет индекс элемента.
В этом случае вы в конечном итоге коллировали parseIntс основанием 0, 1 и 2 по очереди. Первый - это то же самое, что не предоставлять параметр, поэтому он устанавливается по умолчанию на основе входных данных (в данном случае база 10). База 1 - это невозможная база чисел, а 3 - недопустимое число в базе 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
Так что в этом случае вам нужна функция обертки:
['1','2','3'].map(function(num) { return parseInt(num, 10); });
или с синтаксисом ES2015 +:
['1','2','3'].map(num => parseInt(num, 10));
(В обоих случаях лучше явно указывать основание, parseIntкак показано на рисунке, потому что в противном случае оно угадывает основание на основе входных данных. В некоторых старых браузерах ведущий 0 заставлял его угадать восьмеричное, что, как правило, проблематично. угадайте hex, если строка начинается с 0x.)
.map(parseFloat)потому что он принимает только один параметр.