【问题标题】:Why is .toString range limited to 36?为什么 .toString 范围限制为 36?
【发布时间】:2016-09-06 16:21:33
【问题描述】:

也许这是个蹩脚的问题,如果是这样,我真诚地道歉。

对我来说,我遇到了一个有趣的挑战。

    <button onClick="myFunc()">Click Me</button>    

    <p id="test"></p>

    <script>
    function myFunc() {
       var n = 15               
       var a = n.toString();    // outputs 15
       var b = n.toString(2);   // outputs 1111
       var c = n.toString(9);   // outputs 16
       var d = n.toString(18);  // outputs f
       var e = n.toString(36);  // outputs f

       var total = a + "<br>" + b + "<br>" + c + "<br>" + d + "<br>" + e;

       document.getElementById('test').innerHTML=total;
    }
    </script>

我知道 2 将输出二进制值,而 18 & 36 将输出十六进制值。但是当我输入 37 时,它什么也没输出。

例如:

var f = n.toString(37);

不输出任何东西。

在控制台中显示:RangeError: radix must be an integer at least 2 and not greater than 36。为什么?

【问题讨论】:

    标签: javascript jquery string integer


    【解决方案1】:

    正如另一个答案中的链接所说,这是因为以 36 为基数有从 0 到 z 的数字。对于大于 36 的基数,应添加一些其他非字母数字符号作为数字。

    反正如你所见,base 36 足以调用大部分 js 方法

    let bar = {baz(){alert(":)")}};
    eval(14643.314021776406.toString(36))()
    

    上面的代码会提醒一个微笑!

    这当然是个玩笑:D

    【讨论】:

      【解决方案2】:

      https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Bad_radix

      为什么限制为 36 个?大于 10 的基数使用字母字符作为数字。因此,基数不能大于 36,因为拉丁字母只有 26 个字符。

      更重要的是,使用基数 18 你不会得到十六进制值。十六进制是基数 16

      【讨论】:

      • “f”是16后唯一的输出吗?
      • 似乎有点失望,我们至少可以去 base 64 (a-zA-Z0-9+/) :D
      • 或者只使用带有 unicode-16 的中文表意文字 :D 如果我们将它们视为字符,它将打开一个新的字母数字表示领域
      猜你喜欢
      • 1970-01-01
      • 2017-10-25
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      • 2019-12-19
      • 1970-01-01
      • 2021-01-13
      • 1970-01-01
      相关资源
      最近更新 更多