浏览器原生 parseInt() 和 toString() 即可完成进制转换:parseInt(str, radix) 将字符串按指定进制转十进制整数,需清洗前缀和空白;toString(radix) 将安全整数转指定进制字符串,超长二进制需限制位数防精度丢失。

直接用 parseInt() 和 toString() 就能搞定核心转换
浏览器原生 JavaScript 已经提供了最简洁可靠的进制转换能力,不需要手写除基取余或查表逻辑。关键在于理解这两个函数的参数含义和边界行为:
-
parseInt(str, radix):把字符串按指定进制解析为十进制整数,radix必须是 2–36 之间的整数,且str不能含空格或前缀(如"0b101"或"0xFF"会失败,除非先清洗) -
num.toString(radix):把十进制数字转为指定进制字符串,num必须是安全整数(Number.isSafeInteger(num) === true),否则二进制/十六进制结果可能丢失精度 - 十六进制输出默认小写,如需大写可链式调用
.toUpperCase();二进制和八进制无大小写问题
处理用户输入时必须清理前缀和空白符
用户粘贴 "0b1101"、"0xFF"、" 1010 " 这类输入很常见,直接传给 parseInt() 会返回 NaN:
- 用正则统一剥离前缀:
input.trim().replace(/^0b/i, '').replace(/^0x/i, '') - 注意:八进制前缀
0o或旧式0开头(如"017")容易误判,建议显式要求用户选进制,而非依赖前缀自动识别 - 转换后应校验结果:
isNaN(result) || !Number.isSafeInteger(result),失败时给出明确提示,比如“请输入有效的二进制数字”
实时双向转换要防循环触发和 NaN 传播
如果三个输入框(二进制、十进制、十六进制)绑定同一个值并互相更新,很容易陷入无限更新或显示 "NaN":
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
- 每次更新只响应「非空且有效」的输入,其他框设为只读(
disabled)或留空,避免脏数据触发下一轮 - 不要在
input事件里无条件调用所有转换函数,先判断当前哪个框被修改(用event.target),再仅更新其余两个 - 十进制框建议用
type="number"并加step="1",但注意它不阻止粘贴非数字字符,仍需 JS 校验
十六进制输入需兼容大小写和省略前缀场景
用户输入 "ff"、"FF"、"0xff"、"#abc" 都应被接受,但 parseInt("ff", 16) 本身已支持大小写,真正要处理的是干扰字符:
立即学习“前端免费学习笔记(深入)”;
- 对十六进制输入,推荐预处理:
input.trim().replace(/[^0-9a-fA-F]/g, ''),清除#、空格、下划线等 - 若允许带
#的颜色码格式,可额外判断长度:6 位或 8 位才按十六进制解析,否则当作普通数值处理 - 输出时用
.padStart(2, '0')补零(如"a"→"0a"),但注意这是显示优化,不是转换逻辑必需
parseInt() 仍会返回一个数,但它早已超出 Number.MAX_SAFE_INTEGER,后续转回字符串就可能出错。真要支持任意精度,得换用 BigInt(注意旧浏览器不支持)或第三方库,但日常工具中更务实的做法是加长度限制(如二进制 ≤ 53 位)并提示。

















