今天在做bilibili的前端面试题时,遇到了一道很有意思的题目
[‘1’, ‘2’, ‘3’].map(parseInt) = ___
A.[1, 2, 3]
B.[0, 1, 2]
C.[NaN, NaN, NaN]
D.[1, NaN, NaN]
函数解析
数组的map()方法
函数格式:
array.map(function(currentValue,index,arr), thisValue)
·currentValue表示当前数据的值
·index表示当前数据的索引(理所当然,第一个为‘0’)
·arr是指当前数组
数组的map()方法就是将该数组内的元素,按顺序传入到map函数中写的方法function()(如Math.sqrt()求根号),最后返回一个经function()操作后的数组。
parseInt()方法
老朋友了,经常用于将字符串内的数字转化为整形,如:“19990504”–>19990504(一千九百九十九万零五百零四)
但其实parseInt可以有两个参数,当只传一个参数时
默认第二个参数为0
即:parseInt(‘10086’,0),0就代表十进制,也就是说,第二个参数表明目标数据的进制
那么,当数据不符合进制限制的时候,就会返回NaN。
回到问题
[‘1’, ‘2’, ‘3’].map(parseInt),就是把[‘1’, ‘2’, ‘3’],依次传递给parseInt。map函数干了三件事,把数组的数据和索引依此传入
parseInt被调用了三次,分别是:
·parseInt('1',0);//传递进去的参数实际上就是数组里的'1',
和第一个元素的索引 index=0。
·parseInt('2',1);//依此类推
·parseInt('3',2);//parseInt只能接收两个参数,所以会忽略map的剩余参数
所以三次调用得出的结果分别是:1,NaN,NaN,
得到数组[1, NaN, NaN]。