【前端面试题】[‘1‘, ‘2‘, ‘3‘].map(parseInt) what & why ?

第一眼看到这个题目的时候,脑海跳出的答案是 [1, 2, 3],但是真正的答案是[1,

NaN, NaN]


首先让我们回顾一下,map 函数的第一个参数 callback。这个 callback 一共可以

接收三个参数,其中第一个参数代表当前被处理的元素,而第二个参数代表该

元素的索引。

arr.map(callback: (value: T, index: number, array: T[]) => U, thisArg?: any);

parseInt 则是用来解析字符串的,使字符串成为指定基数的整数。接收两个

参数,第一个表示被处理的值(字符串),第二个表示为解析时的基数。

parseInt(string, radix)

了解这两个函数后,我们可以模拟一下运行情况:

将数组的每个元素传递给指定的函数处理,并返回处理后的数组,所以 ['1','2','3'].map(parseInt) 就是将字符串1,2,3作为元素;0,1,2作为下标分别调用 parseInt 函数。即分别求出 parseInt('1',0), parseInt('2',1), parseInt('3',2)的结果。

parseInt('1', 0) //radix 为 0 时,且 string 参数不以“0x”和“0”开头时, 按照 10 为基数处理。这个时候返回 1;

parseInt('2', 1) //基数为 1(1 进制)表示的数中,最大值小于 2,所以无法解析,返回 NaN;

parseInt('3', 2) //基数 为 2(2 进制)表示的数中,最大值小于 3,所以无法解析,返回 NaN;

猜你喜欢

转载自blog.csdn.net/qq_38679823/article/details/127899007
今日推荐