javascript中number类型只存十进制数值,进制差异仅存在于字符串表示;字符串转数字用parseint(str, radix),数字转字符串用tostring(radix),需注意类型、参数范围及边界行为。

JavaScript 中 Number 类型本身只存储十进制数值,所谓“不同进制”只是书写形式或字符串表示方式的差异。真正的转换发生在字符串与数字之间,核心方法是 parseInt() 和 toString(),关键在于理解它们的输入类型、参数含义和边界行为。
字符串转数字:用 parseInt() 按指定进制解析
把带进制标识的字符串变成真正的数字,必须靠 parseInt(str, radix),其中 radix 是 2–36 的整数,明确告诉 JS 这个字符串原本是几进制。
-
parseInt("1010", 2)→ 10(二进制字符串转为十进制数) -
parseInt("ff", 16)→ 255(十六进制小写字符串也识别) -
parseInt("0o77", 8)→ 63(带前缀时仍需指定 radix,否则可能误判)
注意:如果省略 radix,parseInt("0xFF") 会按十进制尝试解析,结果是 0;而 parseInt("0xFF", 16) 才正确返回 255。遇到带前缀又不确定进制的情况,可传 0 让它自动识别(如 parseInt("0b101", 0)),但更推荐显式指定,避免歧义。
数字转字符串:用 toString() 指定输出进制
已有数字变量,想转成某进制的字符串,调用 .toString(radix) 即可。该方法只对数字有效,且不支持小数点后部分(即只处理整数部分)。
-
(255).toString(16)→ "ff" -
(10).toString(2)→ "1010" -
(-42).toString(2)→ "-101010"(负数保留负号,再转绝对值)
若对字符串直接调用 .toString(),会报错。务必先确保是数字类型,比如 Number("255").toString(16) 或 +str.toString(16)。
带前缀字面量的识别:代码中写死 vs 运行时输入
在 JS 代码里直接写 0b101、0o77、0xFF,引擎会在编译阶段就转成十进制数,运行时已无进制痕迹。但用户输入或 API 返回的字符串如 "0xFF" 不是字面量,不会被自动识别。
- 推荐用
Number("0xFF")解析带标准前缀的字符串,它能自动识别0x、0o、0b -
Number("0xG1")会返回 NaN,因为 G 不合法;建议配合isNaN()校验 -
parseInt("0xFF", 16)更严格,适合明确知道进制的场景
安全转换的几个实用细节
实际开发中容易踩坑的地方,集中在输入不可控和类型混淆上。
- 空字符串
""经Number("")得 0,但parseInt("", 10)得 NaN,行为不同 -
undefined、null、NaN传给parseInt或Number都可能返回 NaN,需提前过滤或默认值处理 - 十六进制字符串含大小写混用(如
"AbC")没问题,parseInt和toString都兼容 - 进制基数超出 2–36 范围(如
toString(37))会抛出错误,不是返回 NaN
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











