假设我们想要把一个字符串数组的每一项转换成整数,我们很自然就想到了把parseInt作为回调函数传给map()函数,但这样做可能会出现意想不到的结果:
var strArr = ["1", "2", "3"]; var numArr = strArr.map(parseInt); console.log(numArr); // [1, NaN, NaN]
在上面的代码中,我们尝试使用map()把数组strArr的每一项由字符串转换成数字,但发现只有第一项成功了,剩余两项却变成了NaN。
出现这种情况的原因是,parseInt()默认接受两个参数,第一个参数是要转换成整数的字符串,第二个参数表示传入的值是几进制格式的(注意不是转换成几进制的值),而map会默认地把三个参数element, index, array传给callback函数。在上面这种情况下,虽然第三个参数被忽略了,但前两个参数都传给了parseInt,所以以上代码可以看作是:
var numArr = strArr.map(function(ele,index) { return parseInt(ele, index); }); //分别来看每一项的话 //parseInt("1", 0) => 1 //parseInt("2", 1) => NaN //parseInt("3", 2) => NaN
解决办法:
var numArr = strArr.map(function(ele) { return parseInt(ele, 10); }); // 或者使用箭头函数 var numArr = strArr.map(ele => parseInt(ele, 10));
注意:因为多数情况下,我们要解析的值都是十进制的,所以强烈建议使用parseInt时始终把10作为第二个参数。