答案不是 [10, 10, 10, 10, 10],而是 [10, NaN, 2, 3, 4]。
我們先看map函數,根據MDN, map()方法返回一個新數組,是原數組中的每個元素都調用callback函數後返回的結果。
var new_array = arr.map(function callback(currentValue[, index[, array]]) { }[, thisArg])callback函數可以接收三個參數:
再看parseInt 函數,根據MDN, parseInt(string, radix) 解析一個字符串並返回指定基數的十進位整數,radix 是2-36之間的整數,表示被解析字符串的基數。
因此,parseInt 的第一個參數是 map 傳入的 currentValue,第二個參數 radix 是 map 傳入的 index。題目變成了:
[parseInt('10',0), parseInt('10',1), parseInt('10',2), parseInt('10',3), parseInt('10',4)]parseInt 的解析規則:
當 radix 小於 2 或大於 36,或第一個非空格字符不能轉換為數字時 parseInt 返回 NaN。
如果不是 NaN,則以第二個參數作為基數做運算。(例如,radix為10,就是可以轉換十進位數,為8可以轉換八進位數,16可以轉換十六進位數,以此類推)。
如果 radix 是 undefined、0 或未指定的,JavaScript會假定以下情況:
如果輸入的 string以 "0x"或 "0X"(一個0,後面是小寫或大寫的X)開頭,那麼radix被假定為16,字符串的其餘部分被當做十六進位數去解析。
如果輸入的 string以 "0"(0)開頭, radix被假定為8(八進位)或10(十進位)。具體選擇哪一個radix取決於實現。ECMAScript5 澄清了應該使用十進位,但不是所有的瀏覽器都支持。因此,在使用 parseInt 時,一定要指定一個 radix。
如果輸入的 string 以任何其他值開頭,radix 是 10 (十進位)。
基於上述規則,可以得出結果 [10, NaN, 2, 3, 4]。