为什么.toString范围限制为36?

时间:2016-05-11 10:19:57

标签: javascript jquery string integer

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

我遇到了一个有趣的挑战。

    <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&amp; 36将输出十六进制值。但是当我把它放37时它不输出任何东西。

例如:

var f = n.toString(37);

不输出任何内容。

在控制台中它说: RangeError:radix必须是一个至少为2且不大于36 的整数。为什么呢?

2 个答案:

答案 0 :(得分:7)

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

  

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

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

答案 1 :(得分:0)

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

无论如何,如您所见,以36为基数足以调用大多数js方法

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