このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。
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 2015年9月.
toString() メソッドは、指定されたSymbol オブジェクトを表す文字列を返します。
In this article
試してみましょう
console.log(Symbol("desc").toString());// 予想される結果: "Symbol(desc)"console.log(Symbol.iterator.toString());// 予想される結果: "Symbol(Symbol.iterator)console.log(Symbol.for("foo").toString());// 予想される結果: "Symbol(foo)"// console.log(Symbol('foo') + 'bar');// 予想される結果: Error: Can't convert symbol to string構文
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() の使用
Symbol("desc").toString(); // "Symbol(desc)"// ウェルノウンシンボルSymbol.iterator.toString(); // "Symbol(Symbol.iterator)"// グローバルシンボルSymbol.for("foo").toString(); // "Symbol(foo)"暗黙的な toString() の呼び出し
JavaScript がtoString() をシンボルラッパーオブジェクトの[Symbol.toPrimitive]() の代わりに暗黙的に呼び出すようにする唯一の方法は、先に[Symbol.toPrimitive]() メソッドを削除しておくことです。
警告:これは実際にはやってはいけません。自分が何をしているのかよく分かっていない限り、組み込みオブジェクトを決して変更しないでください。
delete Symbol.prototype[Symbol.toPrimitive];console.log(`${Object(Symbol("foo"))}`); // "Symbol(foo)"仕様書
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-symbol.prototype.tostring> |