面試題,結果為 [ 1, NaN, NaN ]
map
Array.prototype.map( callbackFn )
callbackFn
函數會被自動傳入三個參數:數組元素,元素索引,原數組本身。
所以 ['1','2','3'].map(parseInt)
就是將數字1,2,3作為元素;0,1,2作為下標分別調用 parseInt 函數。即分別求出 parseInt('1',0), parseInt('2',1), parseInt('3',2)的結果。
parseInt
語法
parseInt(string, radix);
參數
string
要被解析的值。如果參數不是一個字符串,則將其轉換為字符串 (使用 ToString
抽象操作)。字符串開頭的空白符將會被忽略。
radix
_ 可選_
從 2
到 36
的整數,表示進制的基數。例如指定 16
表示被解析值是十六進制數。如果超出這個范圍,將返回 NaN
。假如指定 0
或未指定,基數將會根據字符串的值進行推算。注意,推算的結果不會永遠是默認值 10
!文章后面的描述解釋了當參數 radix
不傳時該函數的具體行為。
返回值
從給定的字符串中解析出的一個整數。
或者 NaN
,當
radix
小于2
或大于36
,或第一個非空格字符不能轉換為數字。
parseInt('123', 5) // 將'123'看作 5 進制數,返回十進制數 38 => 1*5^2 + 2*5^1 + 3*5^0 = 38
結果分析
['1','2','3'].map(parseInt)即
parseInt('1',0);radix 為 0,parseInt() 會根據十進制來解析,所以結果為 1;
parseInt('2',1);radix 為 1,超出區間范圍,所以結果為 NaN;
parseInt('3',2);radix 為 2,用2進制來解析,應以 0 和 1 開頭,所以結果為 NaN。