["1", "2", "3"].map(parseInt)爲什麼是[1,NaN,NaN] ?

[“1”, “2”, “3”].map(parseInt)

在學習前端中,我遇到了這麼一道題。

var a = ["1", "2", "3"].map(parseInt);
console.log(a);	//	[1,NaN, NaN];

下面我們看一下 map 和 parse 這兩種方法

1. map
  • map函數的參數是一個函數。而傳入的函數裏一般需要一個或者兩個參數。即
var a = [1,2,3];
//一個參數
a.map(function(item){
	console.log(item);	//	1 2 3
})

//	兩個參數
a.map(function(item,index){
	//	item 是值,index是下標
	console.log(item + " " + index); 
	//	1 0		2 1		3 2
})
2. parseInt
  • 用於解析字符串,並且返回一個整數
  • parseInt(string, radix) 其中string是傳入的字符串,必選,而radix是基數,即讓轉化的整數以幾進制返回。
  • radix:數字2-36之前的整型,默認使用10,表示十進制。這個參數的意義是指把前面的字符看作是多少進制的數字,所謂的基數。

parseInt(‘123’, 5) // 38
將’123’看作5進制數,返回十進制數38 => 15^2 + 25^1 + 3*5^0 = 38

  需要注意的是,如果radix在2-36之外會返回NaN。
  在沒有指定基數,或者基數爲 0 的情況下,JavaScript 作如下處理:
  1. 如果字符串 string 以"0x"或者"0X"開頭, 則基數是16 (16進制).
  2. 如果字符串 string 以其它任何值開頭,則基數是10 (十進制)。
  3. 如果字符串 string 以"0"開頭, 基數是8(八進制)或者10(十進制),那麼具體是
     哪個基數 由實現環境決定。ECMAScript 5 規定使用10,但是並不是所有的瀏覽器
     都遵循這個規定。因此,永遠都要明確給出radix參數的值。

運行過程:

因爲parse最多接收兩個參數,則
傳入數組中的value和index,結果如下:

parseInt('1', 0); // 1 (規定使用10來作爲基數,相當於用十進制來表示1)
parseInt('2', 1); // NaN (radix傳的是1,超出了radix的界限)
parseInt('3', 2); // NaN (以二進制來表示3是不可能的,因此返回NaN)
以上就是我的講解。
練習:

如果各位讀者覺得你懂了,給你出道題吧。

var a = ["1", "2", "1", "3"].map(parseInt);
console.log(a);

會輸出多少呢?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章