[‘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 @   打遍天下吴敌手  阅读(450)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示