[‘1‘,‘2‘,‘3‘].map(parseInt)结果返回什么?
对于下面的代码究竟会返回什么呢?
console.log(['1','2','3'].map(parseInt));
我们都知道 map() 方法是对原始数组中同样位置的元素运行传入函数而返回的结果,结果是一个数组,这一点毋容置疑。而 parseInt 解析一个字符串,并返回一个整数。所以我们当然会觉得上面代码会打印出 [1,2,3],但是通过打印后发现返回的是 [1,NaN,NaN],这是为什么呢?
首先我们来看一下 parseInt 的具体用法:
语法
parseInt(s,radix)解析一个字符串,并返回一个整数。
参数
s:表示字符串
radix:表示其它进制转十进制的基数,范围在2~36,不在这个范围的返回NaN。该参数可以省略或为0,这种情况会根据字符串的开头来判断基数,规则如下:
- 字符串以"0x" 开头,基数为16
- 字符以"0"开头,版本低于ECMAScript 5的,基数为8。版本为ECMAScript 5的,基数为10
- 以 1 ~ 9 的数字开头,基数为10。
基数是什么?
基数:是其它进制转十进制数的公式里的组成部分,公式如下:
位数1 * 基数0 + 位数2 * 基数1 + 位数3 * 基数2 + 位数n * 基数n-1 ...
例如:
parseInt(“101”,2) :101=1*20+0*21+1*22=1+0+4=5 返回5
parseInt(“210”,3) :210=0*30+1*31+2*32=0+3+18=21 返回21
注意 map 可以传入三个参数,而 parseInt 只接受前两个。
分析结果
['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。
那分析分析 ['1', '7', '11'].map(parseInt); => [1, NaN, 3]

浙公网安备 33010602011771号