Странное поведение для Map, parseInt

Возможный дубликат:
javascript - Array.map и parseInt

Я видел этот пример странного поведения JavaScript в твиттере

['10','10','10','10','10'].map(parseInt)

оценивается как

[10, NaN, 2, 3, 4]

Может кто-нибудь объяснить это поведение? Я проверил его в chrome и firebug

['10','10','10','10','10'].map(function(x){return parseInt(x);})

правильно возвращает массив из десяти в виде целых чисел. Это неправильное использование map(), ошибка с parseInt или что-то еще?

Ответ 1

parseInt получает два аргумента: string и radix:

var intValue = parseInt(string[, radix]);

while map Второй аргумент обработчика - индекс:

... callback вызывается с тремя аргументами: значением элемента, индекс элемента и объект массива, пройденный.

Ответ 2

parseInt использует первые два аргумента, передаваемых по карте, и использует второй аргумент для указания основы.

Вот что происходит в вашем коде:

parseInt('10', 0) // 10
parseInt('10', 1) // NaN
parseInt('10', 2) // 2
parseInt('10', 3) // 3
parseInt('10', 4) // 4

Здесь ссылка на MDN на parseInt: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/parseInt.

Ответ 3

Из MDN:

обратный вызов вызывается с тремя аргументами: значением элемента, индекс элемента и объект массива, пройденный.

parseInt() принимает два аргумента. Значение и основание. Это означает, что функция parseInt() вызывается с непреднамеренными параметрами.