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"]
):
- 生成数字的字符串表示形式
35
.
- 将步骤 #1 中生成的字符串转换为由指定的数字基数
radix
.
例如,如果您想要一个字符串表示形式35
,二进制形式:
console.log(35..toString(2)); // "100011"
有趣的事实:语法[integer]..[method]
在 JavaScript 中是完全有效的,第一个.
被解释为小数点,后者为.
位于对象的方法/属性名称之前。
Radix https://en.wikipedia.org/wiki/Radix
如果你不知道什么是“基数”(因为在这个问题之前我不知道,不,我不是穴居人,英语不是我的母语),这是我通过谷歌搜索得到的定义“基数含义”:
计数系统的基础。