【问题标题】:What does passing an integer number as the argument for `toString` do?传递一个整数作为 `toString` 的参数有什么作用?
【发布时间】:2017-10-12 04:13:33
【问题描述】:

我正在学习 JavaScript 课程,但没有关于 toString 方法的指南,这两个输出在 JavaScript 中的目的是什么:

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

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

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

【问题讨论】:

  • 请阅读documentation on Number.prototype.toString然后edit你的问题,这样你就问了一个经过充分研究的具体问题。
  • @4castle 如果它不是重复的,也不是太初学者,那么主观上,我认为这是 StackOverflow 的一个合理问题。
  • @Taurus 这是一个合理的问题。低质量并不是一个密切的原因。这是一个反对票的原因。
  • @4castle 为什么你认为它质量低?

标签: javascript numbers tostring


【解决方案1】:

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


Object.prototype.toString()

对象的toString 方法应该返回该对象的字符串表示形式(我说“应该”是因为您可以修改它使其不返回字符串)。 35 显然不是一个对象,它是一个原语,但是您像使用对象一样使用它,这会导致 JavaScript 为该 toString 调用创建一个临时的 Number 对象(请参阅 this StackOverflow 关于自动装箱的答案) .


Number.prototype.toString()

关于您通过将36 传递给(35).toString 得到的令人困惑的行为:这是因为Number.prototype.toString 可以接受一个参数,您可以使用该参数来指定用于该数字的字符串表示的数字基数,即参数必须是介于236 之间的整数(或任何其他可以强制转换为整数的值,例如35..toString([20])),因此2 <= [radix] <= 36(这意味着您的第二个示例将抛出RangeError)。

所以,当你执行(35).toString(36) 时,会发生两件事(不一定按照我的顺序,很可能是一步完成的,35 ====> [string representation of 35 in numeric format specified by "radix"]):

  1. 生成数字35的字符串表示形式。
  2. 将步骤#1 中生成的字符串转换为radix 指定的基数。

例如,如果您想要以二进制形式表示 35 的字符串:

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

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


Radix

如果您不知道“基数”是什么(因为在此问题之前我不知道,不,我不是穴居人,英语不是我的母语),这是我得到的定义谷歌搜索“基数含义”:

记数系统的基础。

【讨论】:

    【解决方案2】:

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

    也许您正在查看的更多代码会更清楚地了解脚本中发生的事情

    【讨论】:

    • 这些是我的导师给我的问题,但我不知道这两个问题中的任何一个都在问什么。感谢您澄清字符串的作用。
    • 请试用OP提供的示例(即第一个)。
    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    相关资源
    最近更新 更多