前端面试题:Array.map(parseInt) array.map搭配parseInt 出现的奇怪输出 [1,2,3].map(parseInt)

题目

let arr = [1,2,3];
let result = arr.map(parseInt);
console.log(result); // expected: [1,NaN, NaN]

解析:

首先看parseInt这个函数:

前端面试题:Array.map(parseInt) array.map搭配parseInt 出现的奇怪输出 [1,2,3].map(parseInt)_第1张图片
参考:parseInt 函数详细信息来自MDN

这个function 一共可以传两个参数,第一个参数是要解析的string,如果不是string也要把它转换成字符串,第二个参数可以不传,但是注意:在W3school中查到的关于第二个参数的解释:
前端面试题:Array.map(parseInt) array.map搭配parseInt 出现的奇怪输出 [1,2,3].map(parseInt)_第2张图片
参考:parseInt 函数详细信息来自W3School

然后我们再来看array.map() 这个函数的传参情况:

前端面试题:Array.map(parseInt) array.map搭配parseInt 出现的奇怪输出 [1,2,3].map(parseInt)_第3张图片
参考: Array.prototype.map()函数详细信息来自MDN

我们可以看到,map里面会自动传入3个参数,但是这里,parseInt函数最多接受两个参数,也就是,currentValue 和 index,

推导

[1,2,3].map( parseInt( currentValue, index))
实际上传递给 parseInt 函数的是 前两个参数,每个回合分别是:

(1,0)=> parseInt(1,0) 根据前面W3school中的定义,传入值为0. 则按以10为基数来解析, 所以此时返回1
(2,1)=> parseInt(2,1) 根据前面W3school中的定义,传入值为1. parseInt将返回NaN
(3,2)=> parseInt(3,2) 根据前面W3school中的定义,传入值为2. 而要解析的数字为3,根本不符合2进制,所以返回NaN

综上:返回的结果就为 [1, NaN, NaN]

如果觉得分享的好,麻烦您赏个赞!谢谢了!

你可能感兴趣的:(javascript)