传递一个整数作为`toString`的参数怎么办?

时间:2017-10-12 04:13:34

标签: javascript numbers tostring

我参加过JavaScript课程,但没有toString方法指南,这两个输出在JavaScript中的用途是什么:

  1. (35).toString(36)>>> "z" !!!

  2. (35).toString(37)>>>抛出RangeError !!!

  3. 我完全不知道为什么我会得到这些结果,如果有人能够对此有所了解,我将非常感激。

2 个答案:

答案 0 :(得分:1)

tldr:Number.prototype.toString可以使用名为radix的参数,该参数指定用于相关数字的字符串表示的数字基础。

<小时/> Object.prototype.toString()

对象的toString方法应该返回该对象的字符串表示形式(我说“假设”因为你可以修改它而不返回字符串)。 35显然不是一个对象,它是一个原始对象,但是你像对象一样使用它,这会导致JavaScript为Number调用创建一个临时toString对象(参见{{ 3}} StackOverflow回答自动装箱)。


this

关于通过将36传递给(35).toString而导致的混乱行为:这是因为Number.prototype.toString()可以使用一个参数来指定用于字符串的数字基数该数字的表示形式,参数必须是35..toString([20])2之间的整数(或任何其他可以强制转换为整数的值,例如36),因此2 <= [radix] <= 36 (这意味着你的第二个例子将抛出Number.prototype.toString)。

因此,当您执行(35).toString(36)时,会发生两件事(不一定是我的订单,很可能是一步完成的,35 ====> [string representation of 35 in numeric format specified by "radix"]):

  1. 生成数字35的字符串表示。
  2. 将步骤#1中生成的字符串转换为radix指定的数字基数。
  3. 例如,如果您想要一个35的字符串表示形式,则采用二进制形式:

    console.log(35..toString(2)); // "100011"

    有趣的事实:语法[integer]..[method]在JavaScript中完全有效,第一个.被解释为小数点,后者为.,位于名称前面对象的方法/属性。


    RangeError

    如果你不知道什么是“基数”(因为我之前没有这个问题,不,我不是穴居人,英语不是我的母语),这是我得到的定义Google搜索“radix含义”:

      

    计算系统的基础。

答案 1 :(得分:-1)

toString将Int转换为字符串。 int用于数学,字符串用作文本,不应该对其进行数学运算。

您正在查看的代码可能会更多地了解脚本中发生的事情