传递一个整数作为“toString”的参数有什么作用?

2023-12-23

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

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

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

我完全困惑为什么我会得到这些结果,如果有人能对此有所启发,我将非常感激。


tldr: Number.prototype.toString可以采用一个称为radix指定用于相关数字的字符串表示形式的数字基数。


Object.prototype.toString() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString

一个物体的toString方法应该返回该对象的字符串表示形式(我说“应该”是因为您可以修改它,这样它就不会返回字符串)。35显然不是一个对象,它是一个原语,但你像对象一样使用它,这会导致 JavaScript 创建一个临时的Number对象toString打电话(见this https://stackoverflow.com/a/17217024/5451765StackOverflow 关于自动装箱的回答)。


Number.prototype.toString() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toString

关于您路过时遇到的令人困惑的行为36 to (35).toString: 这是因为Number.prototype.toString https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toString可以采用一个参数,您可以使用该参数指定用于该数字的字符串表示形式的数字基数,该参数必须是整数(或可以强制转换为整数的任何其他值,例如35..toString([20])) 之间2 and 36, so 2 <= [radix] <= 36(这意味着你的第二个例子将抛出一个RangeError https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/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 https://en.wikipedia.org/wiki/Radix

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

计数系统的基础。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

传递一个整数作为“toString”的参数有什么作用? 的相关文章

随机推荐