JavaScript数字无进制属性,内存中均为IEEE 754二进制浮点数;进制转换本质是数值与字符串的相互转化:toString(radix)生成不带前缀的指定进制字符串,parseInt(string, radix)将字符串解析为十进制整数。

JavaScript 的 Number 类型本身不存储进制信息,所有数字在内存中都以二进制浮点数(IEEE 754)形式存在。所谓“进制转换”,实际是将数字转为对应进制的**字符串表示**,或把特定进制的字符串**解析为十进制数值**。
用 toString(radix) 转成指定进制字符串
这是最常用的方法,适用于整数和能精确表示的浮点数(注意:浮点数转非十进制可能丢失精度)。
-
radix是进制基数,取值范围是 2–36;超出会抛出RangeError - 结果始终是**不带前缀的纯字符串**(例如不会自动加
0x或0b) - 负数会保留负号,如
(-10).toString(2)→"-1010"
示例:
let num = 255;console.log(num.toString(2)); // "11111111"
console.log(num.toString(8)); // "377"
console.log(num.toString(16)); // "ff"
console.log((12.5).toString(2)); // "1100.1"(仅对可精确表示的二进制小数有效)
用 parseInt(string, radix) 解析任意进制字符串
该方法将字符串按指定进制解析为十进制整数,忽略开头空格,遇到非法字符即停止解析。
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
radix必须显式传入(除非字符串有0x/0o/0b前缀且想依赖自动推断,但不推荐) - 若字符串开头无法匹配该进制的有效数字,返回
NaN - 支持大小写字母(a–z 表示 10–35),大小写不敏感
示例:
console.log(parseInt("1010", 2)); // 10console.log(parseInt("ff", 16)); // 255
console.log(parseInt("777", 8)); // 511
console.log(parseInt("1G", 17)); // 33(G 表示 16,1×17 + 16 = 33)
console.log(parseInt("123abc", 10)); // 123(遇到 a 停止)
十六进制、八进制、二进制字面量的写法(输入时用)
这些是 JavaScript 源码中书写数字的语法糖,运行时仍转为十进制数值:
- 二进制:
0b或0B开头,如0b1010→ 十进制 10 - 八进制:
0o或0O开头(ES6+),旧写法0123在严格模式下报错 - 十六进制:
0x或0X开头,如0xFF→ 十进制 255
注意:这些前缀只影响源码解析,不影响运行时类型或值。
注意事项与常见陷阱
进制转换看似简单,但容易踩坑:
-
parseFloat()不支持radix参数,只能解析十进制浮点数 - 浮点数转非十进制不可靠,例如
(0.1).toString(2)会产生无限循环小数的截断结果 -
parseInt("08")在旧浏览器中可能被误认为八进制(返回 0),务必显式传10 - 大整数(超过
Number.MAX_SAFE_INTEGER)用toString可能丢失精度,此时应使用BigInt配合toString()

















