Функция обратного вызова в 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 приводил угадайте восьмеричное, что, как правило, проблематично. Оно все равно будет угадывать гекс, если строка начинается с 0x
.)