[“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);
會輸出多少呢?