Number.prototype.toString()

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

Number 值的 toString() 方法返回一個表示此數字值的字串。

試一試

function hexColor(c) {
  if (c < 256) {
    return Math.abs(c).toString(16);
  }
  return 0;
}

console.log(hexColor(233));
// Expected output: "e9"

console.log(hexColor("11"));
// Expected output: "b"

語法

js
toString()
toString(radix)

引數

radix 可選

一個介於 236 之間的整數,指定用於表示數字值的基數。預設為 10。

返回值

一個表示指定數字值的字串。如果基數是 10 且數字的絕對值大於或等於 1021 或小於 10-6,則使用科學計數法。

異常

RangeError

如果 radix 小於 2 或大於 36,則丟擲該錯誤。

TypeError

如果此方法在非 Number 物件上呼叫,則丟擲該錯誤。

描述

Number 物件重寫了 ObjecttoString 方法;它不繼承 Object.prototype.toString()。對於 Number 值,toString 方法返回指定基數下的值的字串表示。

對於大於 10 的基數,字母用於表示大於 9 的數字。例如,對於十六進位制數(基數 16),使用 af

如果指定的數字值為負數,則保留符號。即使基數為 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"

浮點數的底層表示是基數為 2 的科學計數法(參見數字編碼)。然而,toString() 方法並不直接使用此數字值的最精確表示。相反,該演算法使用區分輸出與相鄰數值所需的最小有效數字位數。例如,如果數字很大,對於同一個浮點數將有許多等效的字串表示,而 toString() 將選擇右邊有最多 0 的那個(對於任何給定的基數)。

js
console.log((1000000000000000128).toString()); // "1000000000000000100"
console.log(1000000000000000100 === 1000000000000000128); // true

另一方面,Number.prototype.toFixed()Number.prototype.toPrecision() 允許您指定精度,並且可能比 toString() 更精確。

toString() 方法要求其 this 值是一個 Number 原始值或包裝器物件。對於其他 this 值,它會丟擲 TypeError,而不會嘗試將其強制轉換為數字值。

由於 Number 沒有 [Symbol.toPrimitive]() 方法,當 Number 物件用於需要字串的上下文(例如在模板字面量中)時,JavaScript 會自動呼叫 toString() 方法。然而,Number 原始值在被強制轉換為字串時,不會查詢 toString() 方法——而是直接使用與初始 toString() 實現相同的演算法進行轉換。

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

示例

使用 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 開頭的字串)。如果您的原始基數不是二進位制、八進位制、十進位制或十六進位制之一,您可能需要手動編寫基數轉換器,或使用庫。

規範

規範
ECMAScript® 2026 語言規範
# sec-number.prototype.tostring

瀏覽器相容性

另見