Do.toString(16)总是返回小写字母

Does .toString(16) always return lowercase?

本文关键字:返回 小写字 toString Do      更新时间:2023-09-26

使用.toString(base)将十进制数转换为10以上的基数时,似乎总是得到一个小写字符串我能相信这个吗?大写字符串是正确的,尽管我的应用程序需要转换。

引用规范中定义这一点的部分(我看了看,但找不到(和任何反例(返回大写字母的浏览器(都是额外的功劳。

示例:

(12648430).toString(16) // returns: "c0ffee". Not "C0FFEE"

,总是小写。自2009年第5版起,规范中就对其进行了定义。以下是5.1规范中的说明;5.0不能直接链接,但它说的基本相同:

如果ToInteger(基数(不是介于2和36之间(包括2和36(的整数,则引发RangeError异常。如果ToInteger(基数(是从2到36的整数,但不是10,则结果是使用指定基数表示该数值的字符串字母a-z用于值为10到35的数字。如果基数不是10,则精确算法取决于实现,但该算法应为9.8.1中规定的算法的推广。

(我强调(

当前规范继续使用a-z进行指定(小写(。

此前,1999年的第三版规范(没有第四版(没有这么说,只是说:

如果基数是从2到36的整数,但不是10,则结果是一个字符串,其选择取决于实现。

但现在,当第三版规范是当前规范时创建的浏览器已经完全消失了,你可以相信它是小写的。事实上,即使在2013年首次发布这个答案时,你也可能做到,因为如果有重要的已知实现做了一些不同的事情,他们通常不会在规范中添加这种东西。

只是为了好玩,这里有一个快速检查:

const str = (12648430).toString(16);
console.log(`${str} === c0ffee? ${str === "c0ffee"}`);

(12648430(.toString(16(将始终返回:"c0ffee";。不是";C0FFEE";,在用一些浏览器检查后,我发现了一个确认:

Number对象覆盖object对象的toString((方法;它没有
inherit Object.protype.toString((。对于Number对象,toString((方法返回以指定基数表示对象的字符串。

toString((方法解析其第一个参数,并尝试返回一个字符串
以指定基数(基数(表示。对于10以上的基数字母表表示大于9的数字。例如对于十六进制数(以16为基数(,使用a到f。

"对于十六进制数(以16为基数(使用a到f

参见参考资料:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toString。