map与parseInt组合遍历----[‘1‘, ‘2‘, ‘3‘].map(parseInt)

['1', '2', '3'].map(parseInt)问这一段代码输出的结果是什么?

单看这一行代码,可能不是那么好理解,把parseInt函数作为一个参数传进来,我们换一种更直观的方式来替换当前代码。

map()函数接收两个参数,item当前每一项,index当前项的索引,所以我们可以把上面这行代码写成:

['1', '2', '3'].map((item, index) => {

        return parseInt(item, index) 

    })

这样是不是就直观很多了呢?

parseInt用来解析一个字符串并返回指定基数的十进制整数,函数接收的前两个参数,第一个参数是被解析的字符串,第二个参数为基数。

parseInt(string, radix)。

从 2 到 36,表示字符串的基数。例如指定 16 表示被解析值是十六进制数。

如果 radix 是 undefined0或未指定的,JavaScript会假定以下情况:

  1. 如果输入的 string以 "0x"或 "0x"(一个0,后面是小写或大写的X)开头,那么radix被假定为16,字符串的其余部分被当做十六进制数去解析。
  2. 如果输入的 string以 "0"(0)开头, radix被假定为8(八进制)或10(十进制)。具体选择哪一个radix取决于实现。ECMAScript 5 澄清了应该使用 10 (十进制),但不是所有的浏览器都支持。因此,在使用 parseInt 时,一定要指定一个 radix。
  3. 如果输入的 string 以任何其他值开头, radix 是 10 (十进制)。

如果第一个字符不能转换为数字,parseInt会返回 NaN

例如parseInt('0xF', 16), 表示被解析的值是一个16进制的数,被解析的值为'0xF',返回的是'0xF'的十进制数。console.log(parseInt('0xF', 16)) ----> 1500。

例如下面的例子,表示被解析的值是一个2进制的数,但'546'并不是一个二进制的数,所以parseInt('546', 2) ----> NaN。

parseInt("546", 2)

['1', '2', '3'].map((item, index) => {

        return parseInt(item, index) 

    })

最终是这样执行的

输入的基数是0 ,按十进制或者八进制来转换,所以转换出来是1

parseInt('1', 0) ---->1

输入的基数是1 ,但是我们并没有1进制的数,所以转换出来是NaN

parseInt('2', 1) ----> NaN

输入的基数是2 ,按二进制来转换,3不是一个2进制的数,所以转换出来是NaN

parseInt('3', 2) ----> NaN

所以最终的结果是---->[1,NaN,NaN]

再来看一个练习题,['10', '10',  '10','10','10'].map(parseInt)最终输出结果是多少呢?

上面这行代码经历了以下历程:

parseInt('10', 0) ---->10 输入的基数是0 ,按十进制或者八进制来转换,所以转换出来是10

parseInt('10', 1) ----> NaN 输入的基数是1 ,我们没有1进制的数,所以返回NaN

parseInt('10', 2) ----> 2 输入的基数是2 ,按二进制,10按二进制转换得到2

parseInt('10', 3) ----> 3 输入的基数是3 ,按三进制,10按三进制转换得到3

parseInt('10', 4) ----> 4 输入的基数是4 ,按四进制,10按四进制转换得到4

所以最终输出结果是[10, NaN, 2, 3, 4]

我们可以使用Number来代替parseInt,例如:

['10', '10',  '10','10','10'].map(Number)  ----> ['10', '10',  '10','10','10']

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值