[‘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]

 

posted @ 2021-11-08 11:37  打遍天下吴敌手  阅读(462)  评论(0)    收藏  举报