console.log([‘1‘,‘2‘,‘3‘].map(parseInt));

答案:[1,NaN,NaN];

首先是map方法的定义

map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。

map() 方法按照原始数组元素顺序依次处理元素。

注意: map() 不会对空数组进行检测。

注意: map() 不会改变原始数组。

语法

array.map(function(currentValue,index,arr), thisValue)

console.log([‘1‘,‘2‘,‘3‘].map(parseInt));_第1张图片


原因: 其实就是 map的callback的第二个参数 index 也就是当前元素的索引 被当做parseInt 的第二个参数radix 的来使用了

1 parseInt('1',0,thisArray);
2 parseInt('2',1,thisArray);
3 parseInt('3',2,thisArray);

第一次,当我我们第一次调用的时候 是这样的:parseInt('1',0),转十进制的返回1

第二次,调用第二个index参数是1,也是说1作为数值的基础。规范里说的很清楚了,如果基础是非0或者小于2,函数都不会查询字符串直接返回NaN

第三次,2作为基数。这就意味着字符串将被解析成字节数,也就是仅仅包含数值0和1。parseInt的规范第十一步指出,它仅尝试分析第一个字符的左侧,这个字符还不是要求基数的有效数字。这个字符串的第一个字符是“3”,它并不是基础基数2的一个有效数字。所以这个子字符串将被解析为空。第十二步说了:如果子字符串被解析成空了,函数将返回为NaN

所以这里的结果就应该是[1,NaN,NaN].

 

你可能感兴趣的:(js,javascript)