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() 方法返回表示该数字值的字符串。

尝试一下

语法

js
toString()
toString(radix)

参数

radix 可选

一个整数,范围在 236 之间,用于指定表示数字值的基数。默认为 10。

返回值

一个表示指定数字值的字符串。

异常

RangeError

如果 radix 小于 2 或大于 36,则抛出该异常。

描述

Number 对象的重写了 ObjecttoString 方法;它不会继承 Object.prototype.toString()。对于 Number 值,toString 方法返回数字值指定基数的字符串表示。

对于 10 以上的基数,字母表示大于 9 的数字。例如,对于十六进制数(基数为 16),af 用于表示大于 9 的数字。

如果指定的值为负数,则符号会被保留。即使基数为 2,也是如此;返回的字符串是带有 - 符号的正数二进制表示,而不是数字值的补码表示。

0-0 都以 "0" 作为其字符串表示。Infinity 返回 "Infinity",而 NaN 返回 "NaN"

如果该数字不是一个整数,则使用小数点 . 来分隔小数部分。如果基数为 10,并且数字的大小(忽略符号)大于或等于 1021 或小于 10-6,则使用科学计数法。在这种情况下,返回的字符串总是显式地指定了指数的符号。

js
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() 初始实现的相同算法进行转换。

js
Number.prototype.toString = () => "重写了";
console.log(`${1}`); // "1"
console.log(`${new Number(1)}`); // "重写了"

示例

使用 toString()

js
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() 将其转换为不同的基数。

js
const hex = "CAFEBABE";
const bin = parseInt(hex, 16).toString(2); // "11001010111111101011101010111110"

注意精度损失:如果原始数字字符串太大(比如大于 Number.MAX_SAFE_INTEGER ),则应使用 BigInt 来替代。然而,BigInt 的构造函数仅支持表示数字字面量的字符串(即以 0b0o0x 开头的字符串)。如果原始基数不是二进制、八进制、十进制或十六进制,则可能需要手工编写基数转换器,或者使用库。

规范

Specification
ECMAScript Language Specification
# sec-number.prototype.tostring

浏览器兼容性

BCD tables only load in the browser

参见