为何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
相关产品推荐
相关产品推荐

