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
オブジェクトを表す文字列を返します。
試してみましょう
構文
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 Language Specification # sec-symbol.prototype.tostring |
ブラウザーの互換性
BCD tables only load in the browser