點擊右上方紅色按鈕關注“小鄭搞碼事”,每天都能學到知識,搞懂一個問題!
聽說這是一道面試題,其實我也無法證明是不是真的,不管是不是,竟然遇上了,作為程序的第一反應就是我得把這道題的答案交待清楚。
一、題中所涉及到的方法
有兩個方法:
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],也很簡單:
都變成10進制輸出整數。
閱讀更多 小鄭搞碼事 的文章