map的回調函數


問題:--js   (['1','2','3']).map(parseInt)

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

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

var map = 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
  4. map函數返回的是一個數組,所以最后結果為[1, NaN, NaN]

上面的可能有點抽象,現在讓我們用實力說話

  • map的回調函數到底返回那些參數,我們用一個匿名函數加arguments去看map的callback返回那些參數
  • 上圖可知,map函數中篩選總共執行了三次,每次都要傳遞了三個實參,當前元素,索引,數組本身
  • 然后我們將上圖的匿名函數換成parseInt,可知parseInt接收了三個參數(但parseInt的形參只有兩個即:1,0)
  • 研究parseInt怎么會得出NaN
  • 綜上所述,研究完畢


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM