问题:
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]