今天看了一個js的題目["1","2","3"].map(parseInt),看到后腦海中浮現的答案是[1,2,3],但是看到正確答案后蒙了,不知道為什么答案會是[1,NaN,NaN],看了解釋(http://developer.51cto.com/art/201504/474298_2.htm)但是還是沒明白,沒辦法,只好重新無看下parseInt和map函數了。
1、parsrInt()
以前一直只有用到parseInt(x),返回一個整數,但是今天重新學習后才知道原來parseInt還有一個可選參數
parseInt(string, radix)
參數 | 描述 |
---|---|
string | 必需。要被解析的字符串。 |
radix | 可選。表示要解析的數字的基數。該值介於 2 ~ 36 之間。 如果省略該參數或其值為 0,則數字將以 10 為基礎來解析。如果它以 “0x” 或 “0X” 開頭,將以 16 為基數。 如果該參數小於 2 或者大於 36,則 parseInt() 將返回 NaN。 |
radix表示string的基數,當radix存在時,string以radix基數解析,當radix為0或者無時,根據string來解析,"0x" 開頭,以16進制解析,“0”開頭,以十進制或8進制解析,1-9開頭,以十進制解析
2、map()
map是對數組的每一個元素調用回調函數並返回一個包含結果的數組,有三個參數,其中一個可選參數
array1.map(callbackfn[, thisArg])
參數 | 定義 |
---|---|
array1 | 必需。一個數組對象。 |
callbackfn | 必需。一個接受**最多**三個參數的函數。對於數組中的每個元素,‘map‘ 方法都會調用 ‘callbackfn‘ 函數一次。 |
thisArg | 可選。可在 ‘callbackfn‘ 函數中為其引用 ‘this‘ 關鍵字的對象。如果省略 ‘thisArg‘,則 ‘undefined‘ 將用作 ‘this‘ 值。 |
map中回調函數的語法:function callbackfn(value, index, array1),可使用最多三個參數來聲明回調函數。
第一參數value,數組元素的值;第二個參數index,數組元素的數組所以;array1,包含該元素的數組對象。
因此,["1","2","3"].map(parseInt)等於[parseInt(1,0),parseInt(2,1),parseInt(3,2)]
parseInt(1,0)//radix為0,1十進制為1
parseInt(2,1)//radix小於2,返回NaN
parseInt(3,2)//radix為2,3的二進制NaN