第一眼看到这个题目时,脑海里的答案是[1,2,3],但是真正的答案是[1,NaN,NaN]
通常情况下,map 方法中的 callback 函数只需要接受一个参数,就是正在被遍历的数组元素本身。但这并不意味着 map 只给 callback 传了一个参数。这个思维惯性可能会让我们犯一个很容易犯的错误。
Array.prototype.map 传递3个参数:
第一个参数代表当前被处理的元素,第二个参数代表该元素的索引,第三个参数是当前数组
parseInt(string, radix)是用来解析字符串的,使字符串成为指定基数的整数,接受两个参数:第一个表示被处理的值,string参数不以0x和0开头时,按10为基数处理;第二个表示解析的基数
了解这两个函数后,可以模拟一下运行情况:
parseInt('1',0); radix为0时,且string参数不以“0x”和“0”开头,按照10为基数处理。这个时候返回1;
parseInt('2',1);基数为1(1进制),1进制最大值不为1,无法解析,返回NaN
parseInt('3',2);基数为2(2进制),最大值为1,无法解析,返回NaN
map函数返回的是一个数组,所以最后结果为[1,NaN,NaN]
var xs = ['10', '10', '10'];
xs = xs.map(parseInt);
console.log(xs); // 输出结果为(3) [10, NaN, 2]