Symbol.prototype.toString()

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 2015 年 9 月以來,該特性已在各大瀏覽器中可用。

toString() 方法 Symbol 值返回一個表示該符號值的字串。

試一試

console.log(Symbol("desc").toString());
// Expected output: "Symbol(desc)"

console.log(Symbol.iterator.toString());
// Expected output: "Symbol(Symbol.iterator)

console.log(Symbol.for("foo").toString());
// Expected output: "Symbol(foo)"

// console.log(Symbol('foo') + 'bar');
// Expected output: Error: Can't convert symbol to string

語法

js
toString()

引數

無。

返回值

一個表示指定符號值的字串。

描述

Symbol 物件覆蓋了 ObjecttoString 方法;它不繼承 Object.prototype.toString()。對於 Symbol 值,toString 方法以 "Symbol(description)" 的形式返回一個描述性字串,其中 description 是符號的 描述

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

因為 Symbol 有一個 [Symbol.toPrimitive]() 方法,所以在將 Symbol 物件 強制轉換為字串 時,該方法始終優先於 toString()。然而,因為 Symbol.prototype[Symbol.toPrimitive]() 返回一個符號原始值,而符號原始值在隱式轉換為字串時會丟擲 TypeError,所以語言永遠不會隱式呼叫 toString() 方法。要將符號轉換為字串,必須顯式呼叫其 toString() 方法或使用 String() 函式。

示例

使用 toString()

js
Symbol("desc").toString(); // "Symbol(desc)"

// well-known symbols
Symbol.iterator.toString(); // "Symbol(Symbol.iterator)"

// global symbols
Symbol.for("foo").toString(); // "Symbol(foo)"

隱式呼叫 toString()

要使 JavaScript 隱式呼叫符號包裝物件上的 toString() 而不是 [Symbol.toPrimitive]() 的唯一方法是先 刪除 [Symbol.toPrimitive]() 方法。

警告:您在實踐中不應該這樣做。除非您確切地知道自己在做什麼,否則切勿修改內建物件。

js
delete Symbol.prototype[Symbol.toPrimitive];
console.log(`${Object(Symbol("foo"))}`); // "Symbol(foo)"

規範

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

瀏覽器相容性

另見