JavaScript - map和parseInt的坑

问题:

var arrs = ['1', '2', '3']; 
var r = arrs.map(parseInt); 
alert(r);//1,NaN,NaN

map

 arr.map(function callback(currentValue[, index[, array]]) {
    // Return element for new_array
}[, thisArg])

parseInt

parseInt(string, radix);

因为map()接收三个参数,parseInt()接收两个参数,所以map的第三个参数被parseInt忽略了。
现在来分析下程序,假如现在执行arr的第一个元素,即'1';对应到map参数可知,此时传入map的第一个参数即为被传递的元素'1';第二个参数即为其索引0;
这两个参数被传入parseInt中,即parseInt('1', 0);对应到上述parsent的参数规则可知,此时结果为1;
同理,parseInt('2',1) //radix小于2 返回NaN
parseInt('3',2) //3是非法的二进制数,返回NaN

解决:

function  parseInt_base10(s)
{
    return parseInt(s,10);
}

r = arrs.map(parseInt_base10,arrs);
//或者r = arrs.map(parseInt_base10);
alert(r);//[1,2,3]
posted @ 2018-04-29 20:01  Rocin  阅读(557)  评论(0编辑  收藏  举报