在學習JavaScript的高階函數時,遇到一個關於map()函數的問題,在實際操做中,如下代碼輸出了意想不到的結果:函數
'use strict'; var arr = ['1', '2', '3']; var r; r = arr.map(parseInt); alert('[' + r[0] + ', ' + r[1] + ', ' + r[2] + ']');
結果是[1, NaN, NaN]。
通過查閱Array.prototype.map()的文檔,深刻了解了map()函數的做用機制,因爲map()接收的回調函數能夠有3個參數:callback(currentValue, index, array),一般咱們僅須要第一個參數,而忽略了傳入的後面兩個參數。不幸的是,parseInt(string, radix)沒有忽略第二個參數,致使實際執行的函數分別是:學習
parseInt('0', 0); // 0, 按十進制轉換prototype
parseInt('1', 1); // NaN, 沒有一進制code
parseInt('2', 2); // NaN, 按二進制轉換不容許出現2ip
能夠改成r = arr.map(Number);,由於Number(value)函數僅接收一個參數;
或者使用以下代碼解決parseInt()的轉換問題:文檔
var arr = ['1','2','3']; var r = arr.map(function(val){ return parseInt(val); }); console.log(r);