解釋運行代碼「'1', '2', '3'」.map(parseInt)的返回值

點擊右上方紅色按鈕關注“小鄭搞碼事”,每天都能學到知識,搞懂一個問題!

聽說這是一道面試題,其實我也無法證明是不是真的,不管是不是,竟然遇上了,作為程序的第一反應就是我得把這道題的答案交待清楚。

一、題中所涉及到的方法

有兩個方法:

1、map

一個掛在數組原型上的方法,由於它能很方便的幫我們遍歷數組數據,所以平時用的還是比較多的。

如一個參數的情況,返回函數里傳的是正在遍歷的函數本身

['1', '2', '3'].map((item)=>{ console.log(item) })

如兩個參數的情況,返回函數里傳的是正在遍歷的函數本身和其索引值

['1', '2', '3'].map((item, index)=>{ console.log(item, index) })

如三個參數的情況,一般不這麼搞,但可以這麼搞

['1', '2', '3'].map((item, index, arr)=>{ console.log(item, index, arr) })

2、parseInt

大家都知道,它的作用是用來解析一個字符串,並返回一個整數。

可以有兩個參數,其中第一個參數是被解析的字符串。第二個參數表示要解析數據的進制數(特別注意:當省略或者為0時當作10進制來處理)。舉個例子:

parseInt("16", 10) // 輸出:16

parseInt("11", 2) // 輸出:3

當然,如果是下面這樣,輸出就是NaN(因為3不是一個二進制,無法輸出整數)

parseInt("3", 2)

二、分析輸出結果

回到題目:['1', '2', '3'].map(parseInt)將輸出什麼?

先來看這段代碼輸出什麼:

['1', '2', '3'].map(function (item,index,arr) {

console.log(item,index,arr)

})

對,很容易理解輸出下面三行:

['1', 0, ['1', '2', '3']]

['2', 1, ['1', '2', '3']]

['3', 2, ['1', '2', '3']]

每一行三個參數:第一參數是正在遍歷的元素,第二個是正在遍歷元素的索引,第三個參數是原數組本身。

也就是說,map在調用返回函數的時候,會給它傳三個參數(上面說的)。而parseInt只能有兩個參數,它會忽略第三個參數。所以如下:

parseInt('1', 0) // 輸出 1

parseInt('2', 1) // 輸出 NaN (由parseInt定義進制數小於2都是NaN)

parseInt('3', 2) // 輸出 NaN(字符串3是非2進制)

最終結果輸出[1, NaN, NaN]

如果要想輸出[1,2,3],也很簡單:

解釋運行代碼「'1', '2', '3'」.map(parseInt)的返回值

都變成10進制輸出整數。


分享到:


相關文章: