3

在学习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);

巅峰小词典
948 声望1.3k 粉丝

百无一用是书生,春鸟秋虫自做声。