直接调用 toString(radix) 是最快最标准的进制转换方式,原生支持 2–36 进制,负数保留符号、小数取整,需确保输入为数字类型且在安全整数范围内。

直接调用 toString(radix) 就是最快、最标准的方式——它原生支持 2 到 36 进制,无需手写除基取余逻辑,浏览器和 Node.js 都已高度优化。
支持的进制范围与字符映射
radix 必须是 2–36 的整数。超出范围会抛出 RangeError。内部使用数字 0–9 加字母 a–z(小写)依次表示数值 10–35:
-
(255).toString(2)→"11111111" -
(255).toString(16)→"ff" -
(1000).toString(36)→"rs"(因为 27×36 + 28 = 1000)
处理负数和小数的注意事项
负数会保留负号,但进制转换仅作用于绝对值部分:
-
(-42).toString(2)→"-101010" -
(-42).toString(16)→"-2a"
小数不被直接支持:(3.14).toString(2) 会先将 3.14 转为 3(即取整),再转进制,结果是 "11"。如需小数部分转换,需自行分离整数/小数并分别处理。
常见误用与规避方式
避免对非数字类型直接调用(如字符串或 null):
- ❌
"255".toString(16)→"255"(字符串的toString忽略参数) - ✅ 正确做法:
Number("255").toString(16)或parseInt("255", 10).toString(16) - ✅ 更安全:
(+value).toString(radix)(利用一元加号强制转数字)
性能与兼容性说明
该方法在所有现代环境(Chrome/Firefox/Safari/Edge/Node.js)中稳定运行,且比手动实现快一个数量级以上。ECMAScript 规范明确要求其实现为“精确、无舍入的整数进制转换”,因此结果可预测、无精度损失(只要输入是安全整数,即 ≤ 2⁵³−1)。

















