看到學(xué)生的一道前端面試題絮识,['1','2','3'].map(parseInt)罗标,結(jié)果是:[1, NaN, NaN]燥筷,有很多人不理解睦授,下面來解釋以下
我們先來了解一下
map函數(shù)
map 方法 (Array) (JavaScript)
對(duì)數(shù)組的每個(gè)元素調(diào)用定義的回調(diào)函數(shù)并返回包含結(jié)果的數(shù)組。
array1.map(function(a,b,c){
a 是數(shù)組中的每一項(xiàng)即‘1‘’2‘’3‘
b 是數(shù)組的下標(biāo) 即0 1 2
c 是原數(shù)組 即 array1
})
如下例子
var arr = ['1','2','3'];
function fn(num,a,c){
console.log(num,a,c);
//num a c
//1 0 ["1", "2", "3"]
//2 1 ["1", "2", "3"]
//3 2 ["1", "2", "3"]
return num;
}
// console.log(arr.map(fn));
由上可知map如果里面是一個(gè)函數(shù)厢钧,將會(huì)將它的參數(shù)傳遞到函數(shù)中去
parseInt(string, radix)
參數(shù) 描述
string 必需鳞尔。要被解析的字符串。
radix 可選早直。表示要解析的數(shù)字的基數(shù)寥假。該值介于 2 ~ 36 之間。
如果省略該參數(shù)或其值為 0霞扬,則數(shù)字將以 10 為基礎(chǔ)來解析糕韧。如果它以 “0x” 或 “0X” 開頭枫振,將以 16 為基數(shù)。
如果該參數(shù)小于 2 或者大于 36萤彩,則 parseInt() 將返回 NaN粪滤。
例子如下
// parseInt(3,2); //NaN
// parseInt(3,4); //3
// parseInt(3,26); // 3
// parseInt(3,36); //3
// parseInt(3,37); //NaN
console.log(["1", "2", "3"].map(parseInt));
// parseInt('1', 0) -> 1 radix 為 0,parseInt() 會(huì)根據(jù)十進(jìn)制來解析雀扶,所以結(jié)果為 1杖小;
// parseInt('2', 1) -> radix 為 1,超出區(qū)間范圍愚墓,所以結(jié)果為 NaN予权;
// parseInt('3', 2) -> NaN radix 為 2,用2進(jìn)制來解析浪册,應(yīng)以 0 和 1 開頭扫腺,所以結(jié)果為 NaN。
// 因?yàn)閜arseInt接收兩個(gè)參數(shù)村象,所以結(jié)果為 [1, NaN, NaN]