['1','2','3'].map(parseInt)的返回值是什麼?

['1','2','3'].map(parseInt)的返回值是什麼?

你的第一反應結果是否是[1,2,3],可是真正的結果是[1, NaN, NaN]。爲何呢?首先看一下數組中的map方法。數組

map方法

引入MDN的解釋,map()方法建立一個新數組,其結果是該數組中的每一個元素都調用一個提供的函數後返回的結果。bash

var arr = [1, 2, 3];
var arr1 = arr.map(x => x+1);
console.log(arr1); // 2,3,4
複製代碼

能夠看出map方法中接受一個函數function,用來處理遍歷數組中的每個元素。函數

new_array = [].map(function callback(currentValue[,index[,array]]){ // Return element for new_array }[, thisArg]);
複製代碼

這個callback一共能夠接收三個參數,其中第一個參數表明當前被處理的元素,第二個參數表明該元素的索引。this

parseInt函數

parseInt是用來解析字符串,使字符串成爲指定基數的整數,parseInt的基本語法,spa

parseInt(string, radix)
複製代碼

接收兩個參數,第一個表示被處理的值(字符串),第二個表示爲解析時的基數。radix是一個介於2-36之間的整數,返回解析後的整數值。 若是被解析參數的第一個字符沒法被轉化成數值類型,則返回 NaNcode

praseInt('111') // 111
parseInt('111', 0) // 111 
// radix爲0時,且string參數不以「0x」和「0」開頭時,按照10爲基數處理
parseInt('111', 1) // NaN 【2 <= radix <= 36】
parseInt('111', 2) // 7
複製代碼

從上面能夠看出根據指定不一樣的radix,返回不一樣的值。索引

radix參數爲n將會把第一個參數看做是一個數的n進製表示,而返回的值則是十進制。element

parseInt('123', 5) // 將'123'看做5進制數,返回十進制數38 => 1*5^2 + 2*5^1 + 3*5^0 = 38
複製代碼

下面咱們來分析一下['1', '2', '3'].map(parseInt);字符串

  1. parseInt('1', 0); // radix爲0時,使用默認的10進制。
  2. parseInt('2', 1); // radix值在2-36,沒法解析,返回NaN
  3. parseInt('3', 2); // 基數爲2,2進制數表示的數中,最大值小於3,沒法解析,返回NaN

map函數返回的是一個數組,因此最後結果爲[1, NaN, NaN]string

相關文章
相關標籤/搜索