看到這個題目的時候舍败,腦海跳出的答案是 [1, 2, 3]科盛,但是真正的答案是[1, NaN, NaN]贤惯。
為什么會出現(xiàn)這么怪異的問題?
其實主要出現(xiàn)在parseInt
身上燕侠,我們先來看下map
的參數(shù)
map函數(shù)的第一個參數(shù)callback:
var new_array = arr.map(
function callback(currentValue[, index[, array]]) {
// Return element for new_array
}[, thisArg]
)
這個callback一共可以接收三個參數(shù)者祖,
currentValue
是callback
數(shù)組中正在處理的當前元素。index
可選, 是callback
數(shù)組中正在處理的當前元素的索引绢彤。array
可選, 是callback map
方法被調用的數(shù)組七问。- 另外還有
thisArg
可選, 執(zhí)行callback
函數(shù)時使用的this
值。
而parseInt
則是用來解析字符串的茫舶,使字符串成為指定基數(shù)的整數(shù)械巡。
parseInt(string, radix)
接收兩個參數(shù),第一個表示被處理的值(字符串)饶氏,第二個表示為解析時的基數(shù)讥耗。
了解這兩個函數(shù)后,我們可以模擬一下運行情況
-
parseInt('1', 0)
//radix為0時疹启,且string參數(shù)不以“0x”和“0”開頭時古程,按照10為基數(shù)處理。這個時候返回1 -
parseInt('2', 1)
//基數(shù)為1(1進制)表示的數(shù)中喊崖,最大值小于2挣磨,所以無法解析,返回NaN -
parseInt('3', 2)
//基數(shù)為2(2進制)表示的數(shù)中贷祈,最大值小于3趋急,所以無法解析,返回NaN
map
函數(shù)返回的是一個數(shù)組势誊,所以最后結果為[1, NaN, NaN]
如何改進才能得到我們需要的結果那呜达?
在 Advanced-Frontend組織 看到一個比較有意思的題目。
主要是講JS的映射與解析
早在 2013年, 加里·伯恩哈德就在微博上發(fā)布了以下代碼段:
['10','10','10','10','10'].map(parseInt);
// [10, NaN, 2, 3, 4]
如果您實際上想要循環(huán)訪問字符串數(shù)組, 該怎么辦粟耻? map()然后把它換成數(shù)字查近?使用編號!
['10','10','10','10','10'].map(Number);
// [10, 10, 10, 10, 10]