在学习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, 按十进制转换prototype
parseInt('1', 1); // NaN, 没有一进制code
parseInt('2', 2); // NaN, 按二进制转换不容许出现2ip
能够改成r = arr.map(Number);,由于Number(value)函数仅接收一个参数;
或者使用以下代码解决parseInt()的转换问题:文档
var arr = ['1','2','3']; var r = arr.map(function(val){ return parseInt(val); }); console.log(r);