JavaScript中的数值进制表示

4,939 阅读2分钟

刷LeetCode的时候, 许多题目都是基于二进制运算, 如何使用JavaScript表示数值呢?

JavaScript中的数值进制表示

使用字面量(literal)直接表示一个数值时,JavaScript 对整数提供四种进制的表示方法:十进制、十六进制、八进制、二进制。

  • 十进制:没有前导0的数值
  • 八进制:有前缀0o或0O的数值,或者有前导0、且只用到0-7的八个阿拉伯数字的数值。
  • 十六进制:有前缀0x或0X的数值。
  • 二进制:有前缀0b或0B的数值。

默认情况下,JavaScript 内部会自动将八进制、十六进制、二进制转为十进制。

数值的展示形式

将十进制的数值转为其他进制表示

Number.prototype.toString用来将一个数值转为字符串形式

toString方法可以接受一个参数(可选), 默认为10, 表示输出的进制, 进制限制在[2,36]之间的整数, 如果不在范围内的参数会抛出一个RangeError。

toString参数范围限制为2~36

方法返回一个以限定进制表示的字符串

toString的使用案例

跟进制相关的其他方法 paseInt

parseInt用于将字符串转为整数。

语法:

parseInt(string, radix);

如果参数 string 包含对于指定进制无意义的字符,则从最高位开始,只返回可以转换的数值。 如果参数 string 的第一个字符不能转化为数字(后面跟着数字的正负号除外),返回NaN。

此处仅强调第二个参数radix:

radix是一个[2,36]之间的整数 (通常认为这个参数的默认值为10, 但是建议使用时总是显示的指定),表示参数 string 的基数。

如果第二个参数是0、undefined(等同于不传使用默认值)和null,则直接忽略, 还是以10作为基数。

parseInt 在正常情况工作的情况会返回一个整数, 在计算出错的时候通常返回NaN, 但不会报错。

Snipaste_2021-05-13_09-45-42.png

此处引出一道有意思的JS面试题

[1,2,3].map(parseInt)会输出什么?

JavaScript Puzzlers!的第一题就是这道题目

此处就不展开讨论了, 把参数和对应的参数限制梳理清楚还是可以理解结果的

参考链接