這是今天在 Daily-Interview-Question 項目 看到一個比較有意思的題目。 主要是講 JS 的映射與解析 早在 2013 年, 加里·伯恩哈德就在微博上發佈瞭如下代碼段:前端
['10','10','10','10','10'].map(parseInt);
// [10, NaN, 2, 3, 4]
複製代碼
parseInt()
函數解析一個字符串參數,並返回一個指定基數的整數 (數學系統的基礎)。git
const intValue = parseInt(string[, radix]);
複製代碼
string
要被解析的值。若是參數不是一個字符串,則將其轉換爲字符串(使用 ToString 抽象操做)。字符串開頭的空白符將會被忽略。github
radix
一個介於2和36之間的整數(數學系統的基礎),表示上述字符串的基數。默認爲10。數組
返回值
返回一個整數或NaN。瀏覽器
parseInt(100); // 100
parseInt(100, 10); // 100
parseInt(100, 2); // 4 -> converts 100 in base 2 to base 10
複製代碼
注意: 在radix
爲 undefined,或者radix
爲 0 或者沒有指定的狀況下,JavaScript 做以下處理:函數
更多詳見parseInt | MDNpost
map()
方法建立一個新數組,數組中的每一個元素都調用一個提供的函數,新數組中的元素就是執行這個函數後返回的結果。學習
var new_array = arr.map(function callback(currentValue[,index[, array]]) {
// Return element for new_array
}[, thisArg])
複製代碼
能夠看到callback
回調函數須要三個參數, 咱們一般只使用第一個參數 (其餘兩個參數是可選的)。 currentValue
是callback 數組中正在處理的當前元素。 index
可選, 是callback 數組中正在處理的當前元素的索引。 array
可選, 是callback map 方法被調用的數組。 另外還有thisArg
可選, 執行 callback 函數時使用的this 值。ui
const arr = [1, 2, 3];
arr.map((num) => num + 1); // [2, 3, 4]
複製代碼
更多詳見Array.prototype.map() | MDNthis
回到咱們真實的例子上
['1', '2', '3'].map(parseInt)
複製代碼
對於每一個迭代map
, parseInt()
傳遞兩個參數: 字符串和基數。 因此實際執行的的代碼是:
['1', '2', '3'].map((item, index) => {
return parseInt(item, index)
})
複製代碼
即返回的值分別爲:
parseInt('1', 0) // 1
parseInt('2', 1) // NaN,radix 須要在 2 和 36 之間
parseInt('3', 2) // NaN, 3 不是二進制
複製代碼
因此:
['1', '2', '3'].map(parseInt)
// [1, NaN, NaN]
複製代碼
由此,加里·伯恩哈德例子也就很好解釋了,這裏再也不贅述
['10','10','10','10','10'].map(parseInt);
// [10, NaN, 2, 3, 4]
複製代碼
若是你就是想要循環訪問字符串數組, 那要怎麼辦? 使用 map()
時而後把它換成數字就行了。
['10','10','10','10','10'].map(Number);
// [10, 10, 10, 10, 10]
複製代碼
想看更過系列文章,點擊前往 github 博客主頁
1. ❤️玩得開心,不斷學習,並始終保持編碼。👨💻
2. 若有任何問題或更獨特的看法,歡迎評論或直接聯繫瓶子君(公衆號回覆 123 便可)!👀👇
3. 👇歡迎關注:前端瓶子君,每日更新!👇