JavaScript进制转换用toString(radix)和parseInt(str,radix),大数用BigInt避免精度丢失;支持2–36进制互转,原生字面量如0b1010、0o755、0xff,BigInt支持toString且仅与BigInt运算。

JavaScript 中数值进制转换主要靠 toString(radix) 和 parseInt(str, radix),而大数字处理推荐使用 BigInt 类型,避免精度丢失。
进制转换:字符串 ↔ 数值
JS 数值默认是十进制,但支持任意 2–36 进制的相互转换。关键在于:数值转字符串用 toString(),字符串转数值用 parseInt()(或 Number() 配合前缀)。
-
十进制 → 其他进制:调用数字的
toString(radix),如(255).toString(16)得"ff",(10).toString(2)得"1010" -
其他进制 → 十进制:用
parseInt(str, radix),如parseInt("ff", 16)得255,parseInt("1010", 2)得10 -
注意前缀与大小写:
toString(16)不带0x前缀;parseInt也不依赖前缀,但若字符串含0x或0b,需对应指定基数(如parseInt("0xff", 16)可行,但parseInt("0xff")默认按 10 进制解析,结果是 0)
十六进制、二进制字面量直接书写
JS 支持原生进制字面量,方便初始化:
- 二进制:
0b1010→10 - 八进制:
0o755(注意是字母o,不是零)→493 - 十六进制:
0xff→255 - 这些字面量在运行时自动转为十进制数值,参与运算无额外转换成本
大整数:用 BigInt 避免精度丢失
JS 的 Number 类型基于 IEEE-754 双精度浮点,安全整数范围是 -(2^53 - 1) 到 2^53 - 1(即 Number.MAX_SAFE_INTEGER)。超出后运算可能出错,例如:
立即学习“Java免费学习笔记(深入)”;
9007199254740992 + 1 === 9007199254740992(错误!)
解决办法是使用 BigInt:
- 声明方式:末尾加
n,如123n、0xffn;或调用BigInt(str),如BigInt("9007199254740992") - 运算限制:
BigInt只能和BigInt运算,不能与普通Number混用(会报错),需显式转换,如10n + BigInt(5) - 进制转换支持:
BigInt也有toString(radix),如255n.toString(2)→"11111111";parseInt也支持大字符串,但返回的是Number,所以超限时应改用BigInt(str)
实际场景小提醒
日常开发中常见需求有颜色值解析、位运算、ID 处理等:
- 颜色十六进制转 RGB:先用
parseInt("ff00aa", 16)得整数,再用位运算提取通道 - 处理长数字 ID(如 Twitter Snowflake):务必用
BigInt初始化,否则低三位可能被抹零 - 二进制标志位操作:可用
number.toString(2)辅助调试,但位运算本身仍用Number或BigInt原生支持(&、|、<<等在BigInt中同样可用)


















