['1', '2', '3'].map(parseInt) 返回结果是什么?

['1', '2', '3'].map(parseInt) 
// [1,NaN,NaN]

这道题目涉及了map和parseInt的运用。


下面对map和parseInt函数进行简单的理解和分析:

map((value, index, array) => newArr)
map函数的参数是一个回调函数callback,这个callback一共可以接收三个参数:

【参数解析】
    -value:数组中正在处理的当前元素。
    -index:数组中正在处理的当前元素的索引。
    -array:map方法被调用的数组。
【返回】
    一个新的数组,每个元素都是执行回调函数的结果。


parseInt(string, radix)
parseInt函数可以解析一个字符串,并返回一个整数:

【参数解析】
    -string:必须。要被解析的字符串。
    -radix :可选。表示要解析的数字的基数。该值介于2~36之间。
                  如果省略该参数或其值为0,则数字将以 10 为基础来解析。
                  如果它以 “0x” 或 “0X” 开头,将以 16 为基数。
                  如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。
【返回】
    返回解析后的数字。


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

通过上述对 map 和 parseInt 函数的分析可以知道,执行方法时,map给parseInt传递了三个参数,其中第三个参数会被 parseInt 忽略,因此会依次执行:

parseInt('1', 0)
// radix是0,按照上述parseInt函数的参数解析,若radix为0则数字将以10为基础来解析,返回 1

parseInt('2',1)
// radix是1,radix的值需介于2~36之间,所以返回 NaN

parseInt('3', 2)
// radix是2,但被解析的字符串是'3',并不符合二进制数的表示规则,
// 超出二进制的表示范围,解析的字符串和基数矛盾,所以返回 NaN

综上,最后返回的数组是 [1, NaN, NaN]。

你可能感兴趣的:(['1', '2', '3'].map(parseInt) 返回结果是什么?)