['1','2','3'].map(parseInt)结果到底是什么?

当初我第一眼看到这个题目时,自然而然的想到了不就是这样的吗

    [parseInt('1'), parseInt('2'), parseInt('3')]   // ==> [1,2,3]
复制代码

我们打印出来,结果却不是这样

这跟我们预想的太不一样了,现在具体来分析一下怎么得到这个结果的


  • 首先看map函数,定义:map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。

map() 方法按照原始数组元素顺序依次处理元素。

array.map(function (currentValue, index, arr){}, thisValue )
复制代码
  1. map函数的第一个参数是一个callback,这个回调函数接受3个参数
    • currentValue:当前元素的值
    • index:当前元素的索引
    • arr:当前元素属于的数组
  2. 第二个参数thisValue,是对象作为该执行回调时使用,传递给函数,用作 "this" 的值
  • 然后看一下parseInt函数,parseInt() 函数解析一个字符串参数,并返回一个指定基数的整数 (数学系统的基础)。
    parseInt(string, radix)
复制代码
parseInt函数接收两个参数,string:要被解析的字符串,radix:要解析的数字的基数。该值介于 2 ~ 36 之间。
复制代码
  1. 当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。

  2. 当忽略参数 radix , JavaScript 默认数字的基数如下:

    • 如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。

    • 如果 string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。

    • 如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。


好的,阅读完这连个API的文档,下面结合这个题目,对于每个迭代map, parseInt()传递两个参数: 字符串和基数。

最终返回结果应该是

[parseInt('1', 0), parseInt('2', 1), parseInt('3', 2)] ==> [1, NaN, NaN]
复制代码

下面拓展一下,分析一下['10', 1, 2, 3, 123, 123, 234, 345, 456, 567, 678].map(parseInt)结果是什么?

打印结果
欢迎交流和指正

转载于:https://juejin.im/post/5cecc9e6e51d4550a629b1f3

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值