[‘1‘,‘2‘,‘3‘].map(parseInt)結果返回什麼?
阿新 • • 發佈:2021-11-08
對於下面的程式碼究竟會返回什麼呢?
console.log(['1','2','3'].map(parseInt));
我們都知道 map() 方法是對原始陣列中同樣位置的元素執行傳入函式而返回的結果,結果是一個數組,這一點毋容置疑。而 parseInt 解析一個字串,並返回一個整數。所以我們當然會覺得上面程式碼會打印出 [1,2,3],但是通過列印後發現返回的是 [1,NaN,NaN],這是為什麼呢?
首先我們來看一下parseInt 的具體用法:
語法
parseInt(s,radix)解析一個字串,並返回一個整數。
引數
s:表示字串
radix:表示其它進位制轉十進位制的基數,範圍在2~36
- 字串以"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
注意 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]