为什么["1", "2", "3"].map(parseInt) 为 1,NaN,NaN;

parseInt()

parseInt() 函数可解析一个字符串,并返回一个整数。

parseInt(string, radix)
参数 描述
string 必需。要被解析的字符串。
radix

可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。

如果省略该参数或其值为 ‘0‘,则数字将以 10 为基础来解析。如果它以 ‘”0x”‘ 或 ‘”0X”‘ 开头,将以 16 为基数。

如果该参数小于 2 或者大于 36,则 ‘parseInt()‘ 将返回 ‘NaN‘

map 方法

对数组的每个元素调用定义的回调函数并返回包含结果的数组。

array.map(callbackfn, thisArg])
参数 定义
array 必需。一个数组对象。
callbackfn 必需。一个接受**最多**三个参数的函数。对于数组中的每个元素,‘map‘ 方法都会调用 ‘callbackfn‘ 函数一次。
thisArg 可选。可在 ‘callbackfn‘ 函数中为其引用 ‘this‘ 关键字的对象。如果省略 ‘thisArg‘,则 ‘undefined‘ 将用作 ‘this‘ 值。

回调函数语法

回调函数的语法如下所示:

function callbackfn(value, index, array)
回调参数 定义
value 数组元素的值。
index 数组元素的数字索引。
array1 包含该元素的数组对象。

现在回到最初的问题,

["1", "2", "3"].map(parseInt) 实际上是这么调用的:

parseInt('1',0,["1", "2", "3"]);

parseInt('2',1,["1", "2", "3"]);

parseInt('3',2,["1", "2", "3"]);

JS函数一般会自动忽视多余的参数,parseInt仅仅需要两个参数,所以我们并不需要担心第三个参数array参数对parseInt的影响。

那么第二个参数是如何影响parseInt的?

在第一次调用时,parseInt的第二个参数是0,上面已经说了,省略该参数或其值为 ‘0‘,则数字将以 10 为基础来解析,所以parseInt('1',0)为1;
parseInt('2',1) 如果该参数小于 2 或者大于 36,则 ‘parseInt()‘ 将返回 ‘NaN‘。,则 parseInt('2',1)为NaN;

parseInt('3',2)第一个string参数以2进制进行解析,而2进制只有0 1 组成,没有3,所以 parseInt('3',2)为NaN;

此问题解决方法

方法一:

['1','2','3'].map(function(value){
return parseInt(value)
})

方法二:

['1','2','3'].map(Number)

延伸:

var a=["1", "2", "3", "4","5",6,7,8,9,10,11,12,13,14,15];
a.map(parseInt);
// [1, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 9, 11, 13, 15, 17, 19]

因为

parseInt(10,9)//
parseInt(11,10)//
parseInt(12,11)//13
...

最新文章

  1. 使用C#类向数据库添加数据的例子源码
  2. 配置javac环境
  3. MD5 32位 小写加密和大写加密
  4. 【BZOJ 4547】【HDU 5157】小奇的集合
  5. asp.net如何在前台利用jquery Ajax调用后台方法
  6. las数据集加载las数据
  7. Java自带webservice
  8. Flashback Drop实例操作
  9. Alamofire 框架浅析
  10. 剑指offer 重建二叉树
  11. 学web前端开发写给新手的建议,超实用!
  12. WPF基础篇之命名空间
  13. sql面试 查找每个班级的前5名学生(取分类数据的前几条数据)
  14. 转自:阮一峰 Git远程操作详解
  15. JS模块化开发(三)——seaJs+grunt
  16. linux 执行远程linux上的shell脚本或者命令以及scp 上传文件到ftp--免密码登陆
  17. 【IDEA】【7】Git更新及提交
  18. 将jira添加至开机自启动
  19. Select-poll-epoll-简介
  20. sping事务的理解

热门文章

  1. Javascript对象拷贝(clone)
  2. poj 2253 Frogger 解题报告
  3. MyEclipse注释配置
  4. 【USACO】 Max Flow
  5. MultiAutoCompleteTextView
  6. ML 徒手系列说明
  7. 【210】通过OleDb读写Excel数据到DataTable
  8. linux中vfork对打开文件的处理
  9. UVaLive 6588 && Gym 100299I (贪心+构造)
  10. Android 实用技巧 --- 命令godir (转载)