使用map()的小陷阱:parseInt

假设我们想要把一个字符串数组的每一项转换成整数,我们很自然就想到了把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作为第二个参数。

 

转载于:https://www.cnblogs.com/sukiY/p/9194486.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值