在学习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]。
经过查阅Array.prototype.map()的文档,深入了解了map()函数的作用机制,由于map()接收的回调函数可以有3个参数:callback(currentValue, index, array),通常我们仅需要第一个参数,而忽略了传入的后面两个参数。不幸的是,parseInt(string, radix)没有忽略第二个参数,导致实际执行的函数分别是:
parseInt('0', 0); // 0, 按十进制转换
parseInt('1', 1); // NaN, 没有一进制
parseInt('2', 2); // NaN, 按二进制转换不允许出现2
可以改为r = arr.map(Number);,因为Number(value)函数仅接收一个参数;
或者使用如下代码解决parseInt()的转换问题:
var arr = ['1','2','3'];
var r = arr.map(function(val){
return parseInt(val);
});
console.log(r);
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。