JavaScript的Number类型统一以IEEE 754双精度浮点数存储,进制差异仅体现在字面量语法糖(0b/0o/0x)、parseInt/toString进制转换及位运算(转32位整数)中,需注意radix显式指定、前缀兼容性与大整数精度限制。

JavaScript 的 Number 类型本身不区分进制,所有数字在内部都以 IEEE 754 双精度浮点数形式存储。所谓“二进制”或“十六进制运算”,实际是字符串与数字之间的转换过程,以及位运算操作的配合使用。
字面量写法:直接输入不同进制的整数
JS 支持多种进制字面量,但仅限于整数,且只用于初始化值:
-
二进制:以
0b或0B开头,如0b1010(等于十进制 10) -
八进制:以
0o或0O开头(ES6),如0o12(等于十进制 10);旧式012在严格模式下报错 -
十六进制:以
0x或0X开头,如0xA(等于十进制 10)
这些写法本质是语法糖,运行时立即转为十进制数值参与计算,不影响底层表示。
字符串 ↔ 数字:进制转换的核心方法
处理用户输入或 API 返回的进制字符串时,主要靠 parseInt() 和 toString():
立即学习“Java免费学习笔记(深入)”;
-
parseInt("1010", 2)→10:第二个参数指定基数(radix),2 表示二进制,16 表示十六进制 -
(255).toString(2)→"11111111":调用数字的toString(radix),支持 2~36 进制 - 注意:
parseInt("0xFF", 16)能解析带前缀的字符串,但parseInt("FF", 16)同样有效;而parseInt("0b11", 2)在较新引擎中支持,旧环境需去掉前缀
位运算:真正按二进制位操作的场景
JavaScript 的位运算符(&、|、^、<<、>>、>>>)会将操作数先转为 32 位有符号整数,再逐位计算:
- 例如:
0b1010 & 0b1100→0b1000(即 8),等价于10 & 12 - 右移运算符
>>保留符号位,>>>是无符号右移(高位补 0),常用于提取字节 - 位运算只对整数部分有效,小数会被截断(
3.7 | 0 === 3)
常见陷阱与注意事项
进制相关操作容易出错的地方:
-
parseInt("08")在旧版 JS 中被当作八进制(结果为 0),因为以 0 开头;务必显式传入 radix,如parseInt("08", 10) -
Number("0x10")可识别十六进制字符串,但Number("0b10")不支持二进制(应使用parseInt("0b10", 2)) - 大整数(超过
2^53 - 1)用Number表示会丢失精度,此时应考虑BigInt(如0b10n、parseInt("...", 2)n)


















