.toString(16)总是返回小写吗?

时间:2013-11-03 10:19:47

标签: javascript tostring

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

引用定义此规范的部分(我看起来也找不到它)以及任何反例(返回大写的浏览器)的额外功劳。

示例:

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

2 个答案:

答案 0 :(得分:19)

可能。这是defined in the 5th edition specification, §15.7.4.2

  

如果ToInteger( radix )不是2到36之间的整数,则抛出 RangeError 异常。如果ToInteger( radix )是2到36之间的整数,而不是10,则结果是使用指定基数的此Number值的String表示形式。 字母az用于值为10到35的数字。如果基数不是10,则精确算法是依赖于实现的,但算法应该是9.8.1中指定的算法。

(我的重点)

,第3版规范(自1999年起)没有说明,它只是说:

  

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

...所以你可能会在野外找到使用大写的引擎(或完全不同的东西)。我说这是不太可能的,如果有重要已知的实现没有这种行为,他们通常不会在规范中添加类似的东西。 I get lower case目前版本的Chrome,Firefox和Opera,以及IE8甚至IE6。所以我认为它可能相当一致。

答案 1 :(得分:0)

(12648430).toString(16)将始终返回:“c0ffee”。不是“C0FFEE”,在用某些浏览器检查之后,我找到了一个确认:

  

Number对象覆盖Object对象的toString()方法;它没有   继承Object.prototype.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