面试题,结果为 [ 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。