js 中的parseInt和map函数

今天遇到一个问题

正常使用使用map这个高阶函数和parseInt这个方法配合使用的时候

首先先了解一下map这个函数

map是对数组的每一个元素调用回调函数并返回一个包含结果的数组,有三个参数,其中一个可选参数

arry1:必需。一个数组对象。

回调函数:必需。一个接受最多三个参数的函数。对于数组中的每个元素,map方法都会调用 callbackfn函数一次。

thisArg:可选。可在 callbackf 函数中为其引用 this 关键字的对象。如果省略 thisArg,则 undefined将用作 this值。

每次调用的时候,一般情况下,里面有一个回掉函数

var arrB=[1,2,3,4,5];
 var arrC=arrB.map(function(num){
    return num*3;
});
console.log(arrC);

结果为:

 一般情况下我们都是这样运用map函数

但是向:

var arr1=['10','12','34','45'];
var arr2=arr1.map(Number);
console.log(arr2);

这种得到的结果为:

就是将字符串转化为数字嘛;但是我们用 :

var arr1=['10','12','34','45'];
var arr2=arr1.map(parseInt);
console.log(arr2);

得到的结果为啥成这样了呢:

 parseInt不是也是将字符串转化为整数类型嘛,但其实并不是

我们看一下parseInt这个方法

他其实有两个参数的,一个string和radix,string就是传入的字符串,radix是进制,默认的就是10进制,传入一个字符将其转化为10进制

parseInt(12.23); //12
parseInt('12d'); //12
parseInt('d12'); //NaN

这是他的基本使用,会从第一个字符开始找,找到无法识别的字符,则返回前面的,如果第一个字符都无法识别的话,将返回NaN

,但是他其实有第二个参数,默认10(代表10进制),0,undefined

parseInt(string,radix);

radix的值可选为2~36;

如果我们写

parseInt('0x1231')

他就会默认以16进制进行转换

其实

['10','12','34','45'].map(parseInt);

把parseInt当做一个回调函数,他里面会传入两个值,一个数组的各个值还有一个数组的索引值

实际流程如下:

['10','12','34','45'].map(parseInt)等于[parseInt(10,0),parseInt(12,1),parseInt(33,2),parseInt(45,3);

parseInt(10,0)   0是默认,则为10

parseInt(12,1)    1不在  radix的值可选为2~36,所以返回NaN

parseInt(33,2)    把33当做2进制进行转换,但是二进制只有0和1,所以无法识别返回NaN

parseInt(45,3)  依然返回的是NaN

故最终的结果为:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值