1. 程式人生 > 其它 >[‘1‘,‘2‘,‘3‘].map(parseInt)結果返回什麼?

[‘1‘,‘2‘,‘3‘].map(parseInt)結果返回什麼?

對於下面的程式碼究竟會返回什麼呢?

console.log(['1','2','3'].map(parseInt));

 我們都知道 map() 方法是對原始陣列中同樣位置的元素執行傳入函式而返回的結果,結果是一個數組,這一點毋容置疑。而 parseInt 解析一個字串,並返回一個整數。所以我們當然會覺得上面程式碼會打印出 [1,2,3],但是通過列印後發現返回的是 [1,NaN,NaN],這是為什麼呢?

首先我們來看一下parseInt 的具體用法:

 語法

  parseInt(s,radix)解析一個字串,並返回一個整數。

 引數

  s:表示字串

radix:表示其它進位制轉十進位制的基數,範圍在2~36

,不在這個範圍的返回NaN。該引數可以省略或為0,這種情況會根據字串的開頭來判斷基數,規則如下:

  • 字串以"0x" 開頭,基數為16
  • 字元以"0"開頭,版本低於ECMAScript 5的,基數為8。版本為ECMAScript 5的,基數為10
  • 以 1 ~ 9 的數字開頭,基數為10。

基數是什麼?

 基數:是其它進位制轉十進位制數的公式裡的組成部分,公式如下:

 位數1 * 基數0 + 位數2 * 基數1 + 位數3 * 基數2 + 位數n * 基數n-1...

 例如:

  parseInt(“101”,2) :101=1*20+0*21+1*22=1+0+4=5 返回5

  parseInt(“210”,3) :210=0*30

+1*31+2*32=0+3+18=21 返回21

 注意 map 可以傳入三個引數,而 parseInt 只接受前兩個。

分析結果

 ['1','2','3'].map(parseInt) 即

 parseInt('1',0):radix 為 0,parseInt() 會根據十進位制來解析,所以結果為 1;

 parseInt('2',1):radix 為 1,超出區間範圍,所以結果為 NaN;

 parseInt('3',2):radix 為 2,用2進位制來解析,應以 0 和 1 開頭,所以結果為 NaN。

那分析分析 ['1', '7', '11'].map(parseInt); => [1, NaN, 3]