必须显式传入进制参数16,否则默认十进制解析易出错;parseint("ff", 16)→255,parseint("0xff", 16)→255,parseint("g1", 16)→nan,不依赖0x前缀,未指定radix时parseint("0xff")→0。

JavaScript 中用 parseInt 解析十六进制字符串,关键在于**显式传入进制参数 16**,否则默认按十进制解析,容易出错。
必须指定 radix 为 16
parseInt 第二个参数 radix 决定进制。十六进制字符串(如 "ff"、"0xFF"、"a1b2")必须写成:
-
parseInt("ff", 16)→ 255 -
parseInt("0xFF", 16)→ 255(前缀不影响,parseInt不自动识别0x) -
parseInt("G1", 16)→ NaN(G不是合法十六进制字符)
注意前缀不是必需的,但要统一格式
parseInt 不依赖 0x 或 0X 前缀——它只认字符本身是否在 0–9 和 a–f(或 A–F)范围内:
-
parseInt("0xff", 16)→ 255(0被当作数字字符,ff解析成功) -
parseInt("0xff")→ 0(没给radix,按十进制:遇到f停止,只取开头的0) - 想兼容带
0x的写法?可先用正则清理:parseInt(str.replace(/^0x/i, ""), 16)
常见陷阱与安全建议
不指定 radix 可能引发静默错误,尤其字符串以 0 开头时(老版 JS 会误判为八进制):
-
parseInt("010")在旧环境可能是 8(八进制),现代严格模式下是 10,但行为不一致 - 始终写
parseInt(str, 16),绝不省略第二个参数 - 需要强校验?搭配
isNaN()或正则判断是否纯十六进制:/^[0-9a-fA-F]+$/.test(str)
不复杂但容易忽略:只要记得加 , 16,就能稳稳转对。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











