為什麼 [1, 7, 11].map(parseInt) 會回[1, NaN, 3]?
Published in
2 min readJul 26, 2019
為什麼 [1, 7, 11].map(parseInt)
會回[1, NaN, 3]?
我們先了解究竟 map 裡面做了什麼事情
var new_array = arr.map(function callback(currentValue[, index[, array]]) {
// Return element for new_array
}[, thisArg])
callback
為產生新陣列之元素的回呼函式,可傳入三個參數:
currentValue
原陣列目前所迭代處理中的元素。index
選擇性原陣列目前所迭代處理中的元素之索引array
選擇性呼叫map
方法的陣列。
轉換之後會變成下面這樣
parseInt(1, 0, [1, 7, 11]);
parseInt(7, 1, [1, 7, 11]);
parseInt(11, 2, [1, 7, 11]);
看出端倪了嗎?
在了解一下 parseInt 所需要的參數
parseInt(string, radix);
string
待轉成數字的字串。若string
參數類型不是字串的話,會先將其轉成字串(相當於先執行ToString
再執行parseInt
)空白值會被忽略。radix
從 2 到 36,能代表該進位系統的數字。例如說指定10
就等於指定十進位。一定要定義這個參數以避免他人的困惑、也好預估函式的行為。如果沒有指定 radix 的話,給出的結果會按照實做不同而異,請注意,通常預設值不是 10 進位。
parseInt(1, 0, [1, 7, 11]);
因為第二個參數給 0 會預設當成 false, 系統自動十進位,所以產生答案是 1
parseInt(7, 1, [1, 7, 11]);
由於沒有 1 進位,所以答案會是 Nan
parseInt(11, 2, [1, 7, 11]);
11
的二進位代表的就是 3
總結
如果要用 parseInt 放進 map 裡面可以改用下面兩種寫法
[1, 7, 11].map(Number);[1, 7, 11].map(d=>parseInt(d));