["1", "2", "3"].map(parseInt)

爲何["1", "2", "3"].map(parseInt) 爲 1,NaN,NaN;javascript

parseInt() 

parseInt() 函數可解析一個字符串,並返回一個整數。java

parseInt(string, radix)
參數 描述
string 必需。要被解析的字符串。
radix

可選。表示要解析的數字的基數。該值介於 2 ~ 36 之間。數組

若是省略該參數或其值爲 ‘0‘,則數字將以 10 爲基礎來解析。若是它以 ‘」0x」‘ 或 ‘」0X」‘ 開頭,將以 16 爲基數。函數

若是該參數小於 2 或者大於 36,則 ‘parseInt()‘ 將返回 ‘NaN‘ui

map 方法

對數組的每一個元素調用定義的回調函數並返回包含結果的數組。this

array.map(callbackfn, thisArg])
參數 定義
array 必需。一個數組對象。
callbackfn 必需。一個接受**最多**三個參數的函數。對於數組中的每一個元素,‘map‘ 方法都會調用 ‘callbackfn‘ 函數一次。
thisArg 可選。可在 ‘callbackfn‘ 函數中爲其引用 ‘this‘ 關鍵字的對象。若是省略 ‘thisArg‘,則 ‘undefined‘ 將用做 ‘this‘ 值。

 

回調函數語法

回調函數的語法以下所示:spa

function callbackfn(value, index, array)
回調參數 定義
value 數組元素的值。
index 數組元素的數字索引。
array1 包含該元素的數組對象。

如今回到最初的問題,code

["1", "2", "3"].map(parseInt) 其實是這麼調用的:對象

parseInt('1',0,["1", "2", "3"]); blog

parseInt('2',1,["1", "2", "3"]);

parseInt('3',2,["1", "2", "3"]);

JS函數通常會自動忽視多餘的參數,parseInt僅僅須要兩個參數,因此咱們並不須要擔憂第三個參數array參數對parseInt的影響。

那麼第二個參數是如何影響parseInt的?

在第一次調用時,parseInt的第二個參數是0,上面已經說了,省略該參數或其值爲 ‘0‘,則數字將以 10 爲基礎來解析,因此parseInt('1',0)爲1;
parseInt('2',1) 若是該參數小於 2 或者大於 36,則 ‘parseInt()‘ 將返回 ‘NaN‘。,則 parseInt('2',1)爲NaN;

parseInt('3',2)第一個string參數以2進制進行解析,而2進制只有0 1 組成,沒有3,因此 parseInt('3',2)爲NaN;

此問題解決方法

方法一:

['1','2','3'].map(function(value){
        return parseInt(value)
})

方法二:

['1','2','3'].map(Number)

延伸:

var a=["1", "2", "3", "4","5",6,7,8,9,10,11,12,13,14,15];
a.map(parseInt);
// [1, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 9, 11, 13, 15, 17, 19]

由於

parseInt(10,9)//9
parseInt(11,10)//11
parseInt(12,11)//13 ...
相關文章
相關標籤/搜索