Javascript 趣味題目
26 Jun 2019 |最近在網路上看到了滿有趣的 Javascript 趣味題目,而且我也答錯,覺得自己打底必須要更精實才對!!
題目如下
首先要先瞭解 map 的 parameter
-
callback:產生新陣列元素的 callback function
1-1. currentValue:迭代目前處理的元素
1-2. index:迭代目前處理的元素索引值
1-3. array:呼叫 map 方法的陣列
-
thisArg:執行 callback 的 this
再來瞭解 parseInt 的 parameter
-
string:待轉成數值的字串
-
radix:從 2 到 36 代表進位系統的值,預設為 10
radix 為 undefined、空、0 的話,Javascript 會
-
string 由
"0x" or "0X"為開頭
,radix 為16(進制)
-
string 由
0
開始,則 radix 會為8 or 16(進制)
,取決於各自實作 -
string 由
其他字串開頭
,則以10(進制)
註:若字串無法轉為 number,則給 NaN
瞭解完參數定義之後,再來看題目
const arr = ['1', '2', '3'].map(parseInt)
console.log(arr)
parseInt 會接收兩個參數,此時會對應到 map callback function 的前兩個參數,也就是 currentValue 及 Index
將 parseInt 覆寫會比較明顯,給大家看接收的值為何
function parseInt(el, index) {
console.log(`${el}-${index}`)
// "1-0"
// "2-1"
// "3-2"
}
const arr = ['1', '2', '3'].map(parseInt)
parseInt 所接收到的進位制值分別為:0 1 2
過程
第一個迭代元素’1’,當 base 為 0 時,要判斷 currentValue 適用於哪種條件
,因為值皆非”0x” or “0X” or “0” 為開頭,所以預設給 10(進制),所以第一個元素是 1
第二個迭代元素’2’,base 為 1,但是1 進制底下沒有數字2
,無法轉換成數字,所以是 NaN
第三個迭代元素’3’,base 為 2,但是2 進制底下只有 0 和 1
,無法轉換成數字,所以是 NaN
答案是[1,NaN,NaN]
延伸題
那將上述題目陣列改為[’’, ‘1’, ‘2’, ‘3’],結果就會不同了
const arr = ['', '1', '2', '3'].map(parseInt)
console.log(arr)
第一個迭代元素空值,無法轉換成 10 進制,所以是 NaN
第二、三、四個迭代元素字串及基底值分別為
-
1 1
-
2 2
-
3 3
進制的最大值是 base - 1,所以這裡的迭代字串皆無法轉換,所以為 NaN
所以答案是[NaN, NaN, NaN, NaN]
參考資料:
Comments