You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何JavaScript中num.toString('hex')报错,toString(16)却正常?

为什么Number.toString('hex')报错,而toString(16)能正常运行?

核心原因

原生JavaScript中Number.prototype.toString()的规则很明确:它的基数参数必须是2到36之间的整数。当你传入字符串'hex'时,不符合参数类型和范围要求,自然会抛出RangeError: toString() radix argument must be between 2 and 36。

而toString(16)是完全合规的用法:16是合法的整数基数,对应十六进制转换,所以能正常返回数字的十六进制字符串形式。

toString('hex')的真实适用场景

你在网上看到的toString('hex')并非原生Number类型的方法,而是属于其他数据类型或环境的API:

  • Node.js的Buffer类型:Buffer实例调用toString('hex')可以把二进制数据转成十六进制字符串,比如Buffer.from([0x7]).toString('hex')会返回'07'。
  • 第三方库/自定义类型:部分前端工具库或自定义对象会实现toString('hex')方法来处理特定格式转换,但这不属于JavaScript原生标准。

代码示例对比

// 原生Number转十六进制的正确写法
let num = 0x7;
console.log('Number转十六进制:' + num.toString(16)); // 输出 "7"

// Node.js中Buffer转十六进制字符串的写法(示例)
const buf = Buffer.from([num]);
console.log('Buffer转十六进制字符串:' + buf.toString('hex')); // 输出 "07"

内容的提问来源于stack exchange,提问作者kzaiwo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 08:20:41