['1', '2', '3'].map(parselnt) 解析

第一眼看到这个题目,第一反应是答案是[1, 2, 3],但是真正的答案是[1, NaN, NaN]。

首先让我们复习一下,map函数的第一个参数callback:

 var new_arr =  array.map(function callback(currentValue, index, arr), thisValue) 

这个callback 一共可以接收三个参数,其中第一个参数代表当前被处理的元素,而第二个参数代表该元素的索引,第三个参数代表当前元素属于的数组对象。

而parseInt 是用来解析字符串的,使字符串成为指定基数的整数。

parseInt(string, radix) 

接收两个参数,第一个表示被处理的值(字符串)。
第二个表示为解析时的基数。该值介于2 ~ 36之间。
如果省略该参数或其值为0,则数字将以10为基础来解析。如果它以“0x” 或 “0X” 开头,将以16为基数。 
如果该参数小于2或者大于36,则parseInt() 将返回NaN。

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

1、parseInt('1', 0) // radix 为0时,且string参数不以“0x” 和 “0” 开头时,按照10 为基数处理。这个时候返回1
2、parseInt('2', 1) // 基数为1 小于2,无法解析,返回NaN
3、parseInt('3', 2) // 基数为2 (2进制)表示的数中,不是以1或是0开头,所以无法解析,返回NaN

map 函数返回的是一个数组,所以最后结果为[1, NaN, NaN]

你可能感兴趣的:(['1', '2', '3'].map(parselnt) 解析)