为啥子会是这样呢?是因为我没有理解:
1)map函数传递参数的定义,2)parseInt函数针对于radix这个参数的理解。
通常使用map函数的时候都会传入一个函数,这个函数一般只使用1-2个参数,
let arr = ['1','2','3'].map(function(item){
//1个参数
return item;
});
//["1", "2", "3"]
let arr = ['1','2','3'].map(function(item, key){
//2个参数
return item+','+key;
});
//["1,0","2,1","3,2"]
其实map标准定义是会传递3个参数:
arr.map(function(item, key, arr){
...
})
接下来看看parseInt的官方定义:
parseInt(string, radix)
string:需要转化的字符,如果不是字符串会被转换,忽视空格符。
radix:数字2-36之间的整型。默认使用10,表示10进制。
这个参数的意义是指把前面的字符看作多少进制的数字,所谓的基数。
例:
parseInt('123',5)
//将"123"看作5进制的数,返回十进制数 38 => 1*5^2 + 2*5^1 + 3*5^0 = 38
如果radix在2-36之外会返回NaN。
在没有指定基数,或者基数为0的情况下,javascript作如下处理:
如果字符串string以 “0x” 或者 “0X” 开头,则基数是16,16进制;
如果字符串string以 “0” 开头,基数是8(8进制)或者10(10进制),根据实现环境决定。
ECMAScript 5规定使用10,但是并不是所有浏览器都遵循这个规定,最好明确给出radix的值。
如果字符串string 以其他任何值开头,则基数是10,10进制。
所以:
let arr = ['1','2','3'].map(function(item, key, arr){
//3个参数
parseInt("1", 0) //0为10进制
parseInt("2", 1) //radix中没有1进制一说
parseInt("3", 2) //2进制中超过1的值不存在
});
//[1, NaN, NaN]