1. 程式人生 > 實用技巧 >['1', '2', '3'].map(parseInt) what & why ?

['1', '2', '3'].map(parseInt) what & why ?

第一眼看到這個題目的時候,腦海跳出的答案是 [1, 2, 3],但是真正的答案是[1, NaN, NaN]。

  • 首先讓我們回顧一下,map函式的第一個引數callback:

var new_array = arr.map(function callback(currentValue[, index[, array]]) { // Return element for new_array }[, thisArg])
這個callback一共可以接收三個引數,其中第一個引數代表當前被處理的元素,而第二個引數代表該元素的索引。

  • 而parseInt則是用來解析字串的,使字串成為指定基數的整數。
    parseInt(string, radix)


    接收兩個引數,第一個表示被處理的值(字串),第二個表示為解析時的基數。

  • 瞭解這兩個函式後,我們可以模擬一下執行情況

  1. parseInt('1', 0) //radix為0時,且string引數不以“0x”和“0”開頭時,按照10為基數處理。這個時候返回1
  2. parseInt('2', 1) //基數為1(1進位制)表示的數中,最大值小於2,所以無法解析,返回NaN
  3. parseInt('3', 2) //基數為2(2進位制)表示的數中,最大值小於3,所以無法解析,返回NaN
    • map函式返回的是一個數組,所以最後結果為[1, NaN, NaN]