面试题,结果为 [ 1, NaN, NaN ]
map
Array.prototype.map( callbackFn )
callbackFn
函数会被自动传入三个参数:数组元素,元素索引,原数组本身。
所以 ['1','2','3'].map(parseInt)
就是将数字1,2,3作为元素;0,1,2作为下标分别调用 parseInt 函数。即分别求出 parseInt('1',0), parseInt('2',1), parseInt('3',2)的结果。
parseInt
语法
parseInt(string, radix);
参数
string
要被解析的值。如果参数不是一个字符串,则将其转换为字符串 (使用 ToString
抽象操作)。字符串开头的空白符将会被忽略。
radix
_ 可选_
从 2
到 36
的整数,表示进制的基数。例如指定 16
表示被解析值是十六进制数。如果超出这个范围,将返回 NaN
。假如指定 0
或未指定,基数将会根据字符串的值进行推算。注意,推算的结果不会永远是默认值 10
!文章后面的描述解释了当参数 radix
不传时该函数的具体行为。
返回值
从给定的字符串中解析出的一个整数。
或者 NaN
,当
radix
小于2
或大于36
,或第一个非空格字符不能转换为数字。
parseInt('123', 5) // 将'123'看作 5 进制数,返回十进制数 38 => 1*5^2 + 2*5^1 + 3*5^0 = 38
结果分析
['1','2','3'].map(parseInt)即
parseInt('1',0);radix 为 0,parseInt() 会根据十进制来解析,所以结果为 1;
parseInt('2',1);radix 为 1,超出区间范围,所以结果为 NaN;
parseInt('3',2);radix 为 2,用2进制来解析,应以 0 和 1 开头,所以结果为 NaN。