【问题标题】:Does .toString(16) always return lowercase?.toString(16) 是否总是返回小写字母?
【发布时间】:2013-11-03 10:19:46
【问题描述】:

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

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

例子:

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

【问题讨论】:

  • 你可以依赖这个,但我认为你不应该这样做。如果案件真的那么重要,只需在适当的地方添加toLowerCase,不要再担心了。
  • 如果没有必要,向所有部署了此代码的客户发送更新将是一种耻辱。由于现有浏览器兼容,而未来的浏览器必须兼容,所以我将保留旧代码。
  • 由您决定,但如果有一天您的代码中断并且您唯一的借口将是“SO 上有人告诉我我的代码没问题” - 将是一种耻辱!

标签: javascript tostring


【解决方案1】:

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

如果 ToInteger(radix) 不是介于 2 和 36 之间的整数,则抛出 RangeError 异常。如果 ToInteger(radix) 是 2 到 36 之间的整数,但不是 10,则结果是使用指定基数的此 Number 值的字符串表示形式。 字母 a-z 用于值 10 到 35 的数字。如果基数不是 10,则精确算法取决于实现,但是该算法应该是 9.8.1 中指定的算法的概括。 p>

(我的重点)

但是,第 3 版规范(从 1999 年开始)没有这么说,它只是说:

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

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

【讨论】:

  • 你说服了我!对我来说没有.toLowerCase()。我也会在某个时候在 IE5 中进行测试并发布更新。
  • @ColBeseder: :-) FWIW,我同意 thg435。我不会为此推送更新只是,但我很想将它包含在我接下来要推送的任何更新中。再说一次,如果你有一个健壮的测试套件,那就没有必要了——如果你添加对一些不能正确处理这个问题的晦涩引擎的支持(从第 5 版规范开始),测试套件就会解决这个问题。
【解决方案2】:

(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

【讨论】:

  • 这不是重复我的回答吗?但指的是非权威来源,而不是权威来源(规范)?
  • 我只是引用参考。
  • @T.J. Crowder,对不起,你的断言是非权威的,在我看来,Javascript 是 Netscape 发明的,mozilla 是一个很好的参考。
  • @jacouh:也许我应该说“确定性”。是的,JavaScript 是由 Netscape 创建的,是的,该语言的开发仍然由 Brendan Eich 领导,是的,Brendan 在 Mozilla 工作。然而,MDN 是协作编辑的,虽然总体上非常很好,但它也有一些明显的地方(例如,forEach 的“垫片”在很长一段时间内都是完全错误的)。 权威故事是来自 ECMA(Brendan 领导开发)的官方规范。但主要的一点是,简单地复制以前的答案是没有用的。
  • 我没有看到你的答案,因为我在 mozilla 上进行了搜索。你是最好的,但我的回答是独立的。
猜你喜欢
  • 1970-01-01
  • 2019-08-16
  • 2013-09-15
  • 1970-01-01
  • 2010-12-25
  • 1970-01-01
  • 2011-06-16
  • 2023-04-09
  • 1970-01-01
相关资源
最近更新 更多