首页 > 其他 > 详细

2020重学前端parseInt

时间:2020-01-09 00:24:52      阅读:94      评论:0      收藏:0      [点我收藏+]

  2010年就开始学前端,最早使用parseInt这个函数已经不记得具体时间了,在我的概念里对它的使用了解是parseInt(string, radix);把string转成数字,radix参数是把数字以多少进制表示出来,一直到今天我99.99%的情况使用场景都是radix等于10,而且也没出现过什么问题。但是最近遇到一个题目[‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘].map(parseInt)我竟然不能很准确的写出正确答案。所以我今天要重新学习一下这个方法了,在认真研究这个方法的时候,还没有想象中的那么容易,下面先看一下这个方法的解释

 技术分享图片

radix取值范围每个具体的值对应关系是:

2 - [0, 1],3 - [0, 1, 2],10 - [0, 1, ..., 9],11 - [0, 1, ..., 9, a], 36 - [0, ..., a, ..., Z]

[‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘].map(parseInt)相当于[‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘].map((cur, index) => parseInt(cur, index));

cur和index的对应关系以及对结果的分析如下:

parseInt(‘1‘, 0); // 0 和 10相当于10进制

parseInt(‘2‘, 1); // 如果该参数小于2或者大于36,则 parseInt将返回 NaN

parseInt(‘3‘, 2); // 2进制的取值范围是0 1没有3,所以返回NaN

parseInt(‘4‘, 3); // 3进制的取值范围是0 1 2没有4,所以返回NaN

parseInt(‘5‘, 4); // 4进制的取值范围是0 1 2 3没有5,所以也返回NaN

其他情况:

parseInt(‘256‘, 3); // 3进制的取值范围是0 1 2没有56,所以返回2

parseInt(‘234‘, 5); // 4进制的取值范围是0 1 2 3,返回69

parseInt在确定被解析的值在radix取值的范围后,还会进行最后一步计算,计算规则如下

比如parseInt(‘234‘, 5);

2 * Math.pow(5, 2) + 3 * Math.pow(5, 1) + 4 * Math.pow(5, 0);  // 运行结果为69

 

参考链接https://www.cnblogs.com/webBlog-gqs/p/8727677.html

 

2020重学前端parseInt

原文:https://www.cnblogs.com/typeof/p/12168571.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!