Symbol.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 September 2015.

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 オブジェクトは 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)"

// ウェルノウンシンボル
Symbol.iterator.toString(); // "Symbol(Symbol.iterator)"

// グローバルシンボル
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)"

仕様書

Specification
ECMAScript® 2025 Language Specification
# sec-symbol.prototype.tostring

ブラウザーの互換性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
toString

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

関連情報