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