Странное поведение для 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()
вызывается с непреднамеренными параметрами.