map和parseInt结合使用

3/2/2022 JavaScript

“ 话不多说进入正题,在快手中看到过一个考题是关于map和parseInt结合使用输出结果值。”

# 题目

[1,2,3,4,5].map(parseInt)输出值

  1. 单独使用map和parseInt感觉没有什么问题,但是结合map以及parseInt就可能会感到晕头转向的,别慌,慢慢分析即可。答案是多少呢?我就不卖关子了,下面我就公布一下正确答案:[1, NaN, NaN, NaN, NaN]。

ps:题外话map和parseInt我就不再讲解了,不懂的可以查阅相关方法的使用。

  1. 为什么答案是这样的呢? 原因:由于map的回调函数的参数index索引值作了parseInt的基数radix,导致出现超范围的radix赋值和不合法的进制解析。(推导过程可以看最后我参考的链接地址)看了原因之后想必大家有所发现了,其实[1,2,3,4,5].map(parseInt)可以等价于下面代码写法:
parseInt(1, 0); // 1
parseInt(2, 1); // NaN
parseInt(3, 2); // NaN
parseInt(4, 3); // NaN
parseInt(5, 4); // NaN
1
2
3
4
5

这样就和[1,2,3,4,5].map(parseInt)输出的值对应上了。

parseInt延展出一个有趣的问题,parseInt(12, 2)输出1,同样parseInt(1234, 2)也是输出1,parseInt(11234111, 2)输出3。其实很简单,关于二进制(同理其他的进制也是一样)包含0-1,等于或者超过2parseInt会截取没有超过的部分。

参考:解惑 ["1", "2", "3"].map(parseInt) 为何返回[1,NaN,NaN]
https://blog.csdn.net/freshlover/article/details/19034079