面试题:
["1", "2", "3"].map(parseInt) 答案是多少?
【分析】
此题,主要是考 map 与 parseInt 方法的参数
思考?
思考?
思考?
01
map 方法
首先,来看看map的语法 ; 如果知道可以跳过
map() 方法创建一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值。
语法:
var new_array = arr.map(function callback(currentValue[, index[, array]]) {
// Return element for new_array
}[, thisArg])参数
callback
生成新数组元素的函数,使用三个参数:
currentValue
callback 数组中正在处理的当前元素。
index可选
callback 数组中正在处理的当前元素的索引。
array可选
map 方法调用的数组。
thisArg可选
执行 callback 函数时值被用作this。
返回值
一个由原数组每个元素执行回调函数的结果组成的新数组。
02
parseInt 方法
再来看看,parseInt的语法; 如果知道可以跳过
parseInt(string, radix) 解析一个字符串并返回指定基数的十进制整数, radix 是2-36之间的整数,表示被解析字符串的基数。
语法
parseInt(string, radix);
参数
string
要被解析的值。如果参数不是一个字符串,则将其转换为字符串(使用 ToString 抽象操作)。字符串开头的空白符将会被忽略。
radix 可选(重点了解)
从 2 到 36,表示字符串的基数。例如指定 16 表示被解析值是十六进制数。请注意,10不是默认值!
返回值
从给定的字符串中解析出的一个整数。
或者 NaN,
当radix 小于 2 或大于 36 ,或
第一个非空格字符不能转换为数字。
03
面试题分析
回顾题目:
["1", "2", "3"].map(parseInt) 答案是多少?
分析:
1、map方法的第一个参数callback是一个函数 ,parseInt就被当前这个函数
2、map方法中的callback函数的参数,第一个表示数组当前值,第二个表示索引
所以,这返回结果主要就看parseInt方法的返回值了
parseInt('1',0);
parseInt('2',1);
parseInt('3',2);
这里,就需要了解下parseInt方法的第二个参数了,radix 可选,从 2 到 36 ,表示字符串的基数,即几进制;2就表示2进制,16就表示16进制
根据上面理论,可以得出
parseInt('1',0);
//radix为0时,使用默认的10进制,返回1。
parseInt('2',1);
// radix值在2-36,无法解析,返回NaN
parseInt('3',2);
// 基数为2,2进制数表示的数中,最大值小于3,无法解析,返回NaN
代码运行如下:

3、map方法会返回一个新的数组
故,最终结果为:[1,NaN,NaN]