1. 程式人生 > >['1','2','3'].map(parseInt)

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

前幾天被問到這個問題,[1,2,3]脫口而出,結果被虐的渣都不剩,首先這個答案肯定是錯的,那麼應該輸出什麼呢?
在這裡插入圖片描述
為啥子會是這樣呢?是因為我沒有理解:
1)map函式傳遞引數的定義,2)parseInt函式針對於radix這個引數的理解。
通常使用map函式的時候都會傳入一個函式,這個函式一般只使用1-2個引數,

let arr = ['1','2','3'].map(function(item){
	//1個引數
	return item;
});
//["1", "2", "3"]

let arr = ['1','2','3'].map(function(item, key){
	//2個引數
	return item+','+key;
});
//["1,0","2,1","3,2"]

其實map標準定義是會傳遞3個引數:

arr.map(function(item, key, arr){
	...
})

接下來看看parseInt的官方定義:

parseInt(string, radix)
string:需要轉化的字元,如果不是字串會被轉換,忽視空格符。
radix:數字2-36之間的整型。預設使用10,表示10進位制。
	這個引數的意義是指把前面的字元看作多少進位制的數字,所謂的基數。

例:

parseInt('123',5)
//將"123"看作5進位制的數,返回十進位制數 38 => 1*5^2 + 2*5^1 + 3*5^0 = 38

如果radix在2-36之外會返回NaN。
在沒有指定基數,或者基數為0的情況下,javascript作如下處理:

如果字串string以 “0x” 或者 “0X” 開頭,則基數是16,16進位制;
如果字串string以 “0” 開頭,基數是8(8進位制)或者10(10進位制),根據實現環境決定。	
ECMAScript 5規定使用10,但是並不是所有瀏覽器都遵循這個規定,最好明確給出radix的值。
如果字串string 以其他任何值開頭,則基數是10,10進位制。

所以:

let arr = ['1','2','3'].map(function(item, key, arr){
		//3個引數
		parseInt("1", 0) //0為10進位制
		parseInt("2", 1) //radix中沒有1進位制一說
		parseInt("3", 2) //2進制中超過1的值不存在
	});
	//[1, NaN, NaN]

上圖控制檯的輸出都可以作解釋。
膜拜大佬:
https://www.cnblogs.com/Candybunny/p/5627905.html