JavaScript的一个parseInt易错点

来源:互联网 发布:成都做seo外包的 编辑:程序博客网 时间:2024/06/14 14:27

参考:廖雪峰老师的javascript教程
小明希望利用map()把字符串变成整数,他写的代码很简洁:

'use strict';var arr = ['1', '2', '3'];var r;r = arr.map(parseInt);alert('[' + r[0] + ', ' + r[1] + ', ' + r[2] + ']');

结果竟然是[1, NaN, NaN],小明百思不得其解,请帮他找到原因并修正代码。

arr.map会为调用的函数传入以下三个参数:
1、currentValue,数组中当前被传递的元素
2、index,数组中当前被传递的元素的索引
3、array,调用 map 方法的数组

而parseInt可以接受两个参数:
1、string:必需。要被解析的字符串。
2、radix:可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。
如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。
如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN

所以实际上是执行了:
parseInt(‘1’,0,[‘1’,’2’,’3’]);//1
parseInt(‘2’,1,[‘1’,’2’,’3’]);//NaN
parseInt(‘3’,2,[‘1’,’2’,’3’]);//NaN

所以修正的代码应为:

r = arr.map(function(x) { return parseInt(x,10) });或者r = arr.map(function(x) { return parseInt(x) });
0 0