parseInt 相信大家在在项目中都经常用到,但是大家在真的了解parselnt么?废话少说先来做一个简单的面试题
- 1. 下面代码输出结果:
let arr = [10.18, 0, 10, 25, 23];arr = arr.map(parseInt);
console.log(arr);结果是什么?
相信大家都不一定一下答对接下来我们进行解析一下
parseInt([value,raidx])语法 第
一个是字符串的转换值 raidx 是进制转换基值 ,大多数我们看到的是这样的理解单真实时情况raidx 并不是简单进制转换
- raidx 是进制转换的基值 什么是基值 就是 如果raidx == 2 那么就把parseInt[value]值当做2进制进制转换 到十进制。
- 了解了这一个特点我们就可以算出 真实parseInt 的使用方法和基本原理
- 1. 10.18 -> raidx 0 默认是 10 进制所以返回 整数 10
2. 0 进制基数 raidx 1 不在 2-36 进制转换范围内所以结果返回不是有效数字 NaN
3. 10 进制转换基数 2 2 进制 10 转换为 10 进制 0*2^0+1*2^1 = 0+1\*2 = 24. 25 进制转换基数 3 3 进制转换 10 进制 查找过程5. 不在 3 进制范围内 所以 直接是 2*3^0 = 2*1 = 223 进制转换基数 4 4 进制转换 10 进制 3*4^0+2*4^1 = 3+2\*4\*1 = 11
- - 最终结果为 [10,NaN,2,2,11]
radix 可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。
如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。
如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。
也就是说如radix 值不在2~36之间 就就会无法进制转换 结果为无效数字NaN
进制转换算法 阶乘 算法 如果是2进制转换10进制 110
* 公式解析为 0*2^0 + 1*2^1+1*1^2 = 2+4 =6
从而可以得出一个简单公式 [value] 第0位开始 * [raidx]^n = parseInt 的最终结果
[value][0] * [raidx]^n = value