['1','2','3'].map(parseInt)結果究竟是什麼?

當初我第一眼看到這個題目時,天然而然的想到了不就是這樣的嗎數組

[parseInt('1'), parseInt('2'), parseInt('3')]   // ==> [1,2,3]
複製代碼

咱們打印出來,結果卻不是這樣 bash

圖片
這跟咱們預想的太不同了,如今具體來分析一下怎麼獲得這個結果的


  • 首先看map函數,定義:map() 方法返回一個新數組,數組中的元素爲原始數組元素調用函數處理後的值。

map() 方法按照原始數組元素順序依次處理元素。函數

array.map(function (currentValue, index, arr){}, thisValue )
複製代碼
  1. map函數的第一個參數是一個callback,這個回調函數接受3個參數
    • currentValue:當前元素的值
    • index:當前元素的索引
    • arr:當前元素屬於的數組
  2. 第二個參數thisValue,是對象做爲該執行回調時使用,傳遞給函數,用做 "this" 的值
  • 而後看一下parseInt函數,parseInt() 函數解析一個字符串參數,並返回一個指定基數的整數 (數學系統的基礎)。
parseInt(string, radix)
複製代碼
parseInt函數接收兩個參數,string:要被解析的字符串,radix:要解析的數字的基數。該值介於 2 ~ 36 之間。
複製代碼
  1. 當參數 radix 的值爲 0,或沒有設置該參數時,parseInt() 會根據 string 來判斷數字的基數。this

  2. 當忽略參數 radix , JavaScript 默認數字的基數以下:spa

    • 若是 string 以 "0x" 開頭,parseInt() 會把 string 的其他部分解析爲十六進制的整數。code

    • 若是 string 以 0 開頭,那麼 ECMAScript v3 容許 parseInt() 的一個實現把其後的字符解析爲八進制或十六進制的數字。orm

    • 若是 string 以 1 ~ 9 的數字開頭,parseInt() 將把它解析爲十進制的整數。cdn


好的,閱讀完這連個API的文檔,下面結合這個題目,對於每一個迭代map, parseInt()傳遞兩個參數: 字符串和基數。 對象

圖片
最終返回結果應該是

[parseInt('1', 0), parseInt('2', 1), parseInt('3', 2)] ==> [1, NaN, NaN]
複製代碼

下面拓展一下,分析一下['10', 1, 2, 3, 123, 123, 234, 345, 456, 567, 678].map(parseInt)結果是什麼? blog

圖片
打印結果
圖片
歡迎交流和指正
相關文章
相關標籤/搜索