試一試
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 物件覆蓋了 Object 的 toString 方法;它不繼承 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 |
瀏覽器相容性
載入中…