一分中带你彻底了解parseInt

199 阅读2分钟

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 = 2
    4. 25 进制转换基数 3 3 进制转换 10 进制 查找过程

    5. 不在 3 进制范围内 所以 直接是 2*3^0 = 2*1 = 2
    23 进制转换基数 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