Number.prototype.toString()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Number
值的 toString()
方法返回表示该数字值的字符串。
尝试一下
语法
toString()
toString(radix)
参数
radix
可选-
一个整数,范围在
2
到36
之间,用于指定表示数字值的基数。默认为 10。
返回值
一个表示指定数字值的字符串。
异常
RangeError
-
如果
radix
小于 2 或大于 36,则抛出该异常。
描述
Number
对象的重写了 Object
的 toString
方法;它不会继承 Object.prototype.toString()
。对于 Number
值,toString
方法返回数字值指定基数的字符串表示。
对于 10 以上的基数,字母表示大于 9 的数字。例如,对于十六进制数(基数为 16),a
到 f
用于表示大于 9 的数字。
如果指定的值为负数,则符号会被保留。即使基数为 2,也是如此;返回的字符串是带有 -
符号的正数二进制表示,而不是数字值的补码表示。
0
和 -0
都以 "0"
作为其字符串表示。Infinity
返回 "Infinity"
,而 NaN
返回 "NaN"
。
如果该数字不是一个整数,则使用小数点 .
来分隔小数部分。如果基数为 10,并且数字的大小(忽略符号)大于或等于 1021 或小于 10-6,则使用科学计数法。在这种情况下,返回的字符串总是显式地指定了指数的符号。
console.log((10 ** 21.5).toString()); // "3.1622776601683794e+21"
console.log((10 ** 21.5).toString(8)); // "526665530627250154000000"
toString
方法要求 this
值是 Number
原始值或包装对象。对于其他 this
值,不会尝试将它们转换为数字值,而是抛出 TypeError
。
因为 Number
没有 [Symbol.toPrimitive]()
方法,当一个 Number
对象在一个期望字符串的上下文中使用时(比如在模板字符串中),JavaScript 会自动调用 toString()
方法。然而,Number
原始值不会使用 toString()
方法来进行字符串强制转换——相反,它们会直接使用与 toString()
初始实现的相同算法进行转换。
Number.prototype.toString = () => "重写了";
console.log(`${1}`); // "1"
console.log(`${new Number(1)}`); // "重写了"
示例
使用 toString()
const count = 10;
console.log(count.toString()); // "10"
console.log((17).toString()); // "17"
console.log((17.2).toString()); // "17.2"
const x = 6;
console.log(x.toString(2)); // "110"
console.log((254).toString(16)); // "fe"
console.log((-10).toString(2)); // "-1010"
console.log((-0xff).toString(2)); // "-11111111"
转换数字字符串的基数
如果你有一个非十进制的数字的字符串,可以使用 parseInt()
和 toString()
将其转换为不同的基数。
const hex = "CAFEBABE";
const bin = parseInt(hex, 16).toString(2); // "11001010111111101011101010111110"
注意精度损失:如果原始数字字符串太大(比如大于 Number.MAX_SAFE_INTEGER
),则应使用 BigInt
来替代。然而,BigInt
的构造函数仅支持表示数字字面量的字符串(即以 0b
、0o
或 0x
开头的字符串)。如果原始基数不是二进制、八进制、十进制或十六进制,则可能需要手工编写基数转换器,或者使用库。
规范
Specification |
---|
ECMAScript Language Specification # sec-number.prototype.tostring |
浏览器兼容性
BCD tables only load in the browser