在騰訊和百度的面試中,出現(xiàn)了這樣一道面試題,,被大家親切的稱呼為網(wǎng)紅面試題,這道面試題就是。['1', '2', '3'].map(parseInt)的輸出結(jié)果是什么?['1', '2', '3'].fliter(parseInt)的輸出結(jié)果是什么?
這個(gè)面試題,面試官可能不僅僅需要你說(shuō)出他的結(jié)果,還需要你知道為什么會(huì)出現(xiàn)這樣的結(jié)果。
一、關(guān)鍵語(yǔ)法
1、parseInt

2、parseFloat

先看看parseInt和parseFloat的語(yǔ)法和使用,以便后續(xù)在實(shí)際例子中解釋。
二、Map

1、['1', '2', '3'].map(parseInt)

其實(shí)在使用map時(shí),map的callback的第二個(gè)參數(shù)index引索值就成為parseeInt的radix值。['1', '2', '3'].map(parseInt)在遍歷的過(guò)程。其實(shí)是經(jīng)歷了下面的過(guò)程。

parseInt('1', 0):radix的值為0,判斷字符串發(fā)現(xiàn)介于1~9,用10進(jìn)制轉(zhuǎn)換,結(jié)果為1.
parseInt('2', 1):radix的值為1,如果該參數(shù)小于 2 或者大于 36,則 parseInt() 將返回 NaN。
parseInt('3', 2): radix的值為2,這就意味著字符串將被解析成字節(jié)數(shù),也就是僅僅包含數(shù)值0和1。parseInt的規(guī)范指出,它僅嘗試分析第一個(gè)字符的左側(cè)。這個(gè)字符串的第一個(gè)字符是“3”,它并不是基礎(chǔ)基數(shù)2的一個(gè)有效數(shù)字。所以這個(gè)子字符串將被解析為空。如果子字符串被解析成空了,函數(shù)將返回為NaN。
2、['1', '2', '3'].map(parseFloat)

parseFloat相對(duì)于parseInt比較簡(jiǎn)單,不用考慮第二個(gè)參數(shù),只需要看第一個(gè)參數(shù)是否能正常轉(zhuǎn)換為數(shù)字就行。

一個(gè)小的知識(shí)點(diǎn):如何快速將一個(gè)字符串?dāng)?shù)組轉(zhuǎn)化為數(shù)字類型的數(shù)組

三、filter

1、['1', '2', '3'].filter(parseInt)

filter 為數(shù)組中的每個(gè)元素調(diào)用一次 callback 函數(shù),并利用所有使得 callback 返回 true 或等價(jià)于 true 的值的元素創(chuàng)建一個(gè)新數(shù)組。

parseInt('1', 0):radix的值為0,判斷字符串發(fā)現(xiàn)介于1~9,用10進(jìn)制轉(zhuǎn)換,結(jié)果為1,所以callback的結(jié)果等價(jià)于true,返回元素'1'。
parseInt('2', 1):radix的值為1,如果該參數(shù)小于 2 或者大于 36,則 parseInt() 將返回 NaN,結(jié)果不等價(jià)于true,不返回。
parseInt('3', 2): radix的值為2,這就意味著字符串將被解析成字節(jié)數(shù),也就是僅僅包含數(shù)值0和1。parseInt的規(guī)范指出,它僅嘗試分析第一個(gè)字符的左側(cè)。這個(gè)字符串的第一個(gè)字符是“3”,它并不是基礎(chǔ)基數(shù)2的一個(gè)有效數(shù)字。所以這個(gè)子字符串將被解析為空。如果子字符串被解析成空了,函數(shù)將返回為NaN。
2、['1', '2', '3'].filter(parseFloat)

使用parseFloat時(shí),遍歷之后結(jié)果的每一項(xiàng)都是結(jié)果等價(jià)于true,所以全部返回。
<<<前端是我一輩子的信仰,寫代碼直到50歲>>>
?關(guān)注微信公眾號(hào):web前端學(xué)習(xí)圈回復(fù)關(guān)鍵詞【簡(jiǎn)書(shū)】送你50G最適合2020年學(xué)習(xí)的web前端零基礎(chǔ)入門教程(視頻+筆記+素材+源碼+項(xiàng)目實(shí)戰(zhàn))
?另外公眾號(hào)每天都會(huì)分享學(xué)習(xí)方法,知識(shí)干貨,實(shí)戰(zhàn)案例,面試技巧,經(jīng)驗(yàn)分享等相關(guān)文章,關(guān)注web前端學(xué)習(xí)圈=關(guān)注5000+前端大牛
四、反思
通過(guò)上述的map、filter,我們聯(lián)想到數(shù)組其他方法,當(dāng)使用parseInt或者是parseFloat來(lái)替代callback使用,你只需要理解到parseInt和parseFloat工作原理,那么針對(duì)這類問(wèn)題,其實(shí)結(jié)果都是能很快輸出的,也能套用上面的解析過(guò)來(lái),來(lái)回答面試官。這類面試題也不是什么難題了。