9

的第二个参数parseInt()定义第一个参数解析到的基数。我一直在玩一些数字,发现如果基数大于 36,我就不再得到正确的答案:

parseInt("1", 36);
// -> 1

parseInt("1", 37);
// -> NaN

有限制吗?为什么是36?

我运行测试时使用的是 chrome

4

3 回答 3

20

36 是 10 + 26。字母表中有 26 个字母,加上 0-9。这是您可以使用的最大基数。

于 2012-11-05T15:12:28.023 回答
11

ECMAScript 规范将最大基数指定为 36。

  • 有 10 位数字:(0-9)
  • 有 26 个字符:(az)
10 + 26 = 36

还应该提到的是,可以支持高于 的基数36。可以调整规范以使用区分大小写的字符来表示大于 36 的基数,例如 37-62。可以使用特殊字符,例如带有符号和重音字母的字符。

他们不是的原因是它模棱两可,而且没有必要。自定义基数的解析算法应该不会太难,并且可以根据需要编写。

将基数限制为 36 有助于平衡性能和实用性。

于 2012-11-05T15:12:31.753 回答
3

最大值为 36,因为这是标准字母表的数字和字符数 (0123456789abcdefghijklmnopqrstuvwxyz)。如果你想知道其他类似的东西,你可能想给官方的 ECMAScript 语言规范添加书签,它都在那里

于 2012-11-05T15:14:27.010 回答