Symbol.toStringTag
BaselineWidely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2017.
Symbol.toStringTag
は静的データプロパティで、ウェルノウンシンボルであるSymbol.toStringTag
を表します。Object.prototype.toString()
はthis
に対して、このオブジェクトの型を表す文字列を持つプロパティを、このシンボルで探します。
試してみましょう
class ValidatorClass { get [Symbol.toStringTag]() { return "Validator"; }}console.log(Object.prototype.toString.call(new ValidatorClass()));// Expected output: "[object Validator]"
値
ウェルノウンシンボルSymbol.toStringTag
です。
Symbol.toStringTag のプロパティ属性 | |
---|---|
書込可能 | 不可 |
列挙可能 | 不可 |
設定可能 | 不可 |
例
既定のタグ
値によってはSymbol.toStringTag
を持たず、特別なtoString()
表現を持つものもあります。完全な一覧は、Object.prototype.toString()
を参照してください。
Object.prototype.toString.call("foo"); // "[object String]"Object.prototype.toString.call([1, 2]); // "[object Array]"Object.prototype.toString.call(3); // "[object Number]"Object.prototype.toString.call(true); // "[object Boolean]"Object.prototype.toString.call(undefined); // "[object Undefined]"Object.prototype.toString.call(null); // "[object Null]"// ... and more
組み込み toStringTag シンボル
ほとんどの組み込みオブジェクトは、独自の[Symbol.toStringTag]
プロパティを提供 しています。ほとんどの組み込みオブジェクト[Symbol.toStringTag]
プロパティは書き込み不可、列挙不可、構成可能です。例外はIterator
で、互換性の理由から書き込み可能です。
Promise
のようなコンストラクターオブジェクトでは、コンストラクターのすべてのインスタンスが[Symbol.toStringTag]
を継承し、文字列化できるように、プロパティはConstructor.prototype
にインストールされます。Math
やJSON
のようなコンストラクター以外のオブジェクトの場合、プロパティは静的プロパティとしてインストールされ、名前空間オブジェクト自体が文字列化できるようになります。コンストラクターが独自のtoString
メソッドを提供することもあります(例えば、Intl.Locale
)。この場合、[Symbol.toStringTag]
プロパティは、明示的にObject.prototype.toString
を呼び出した場合にのみ使用されます。
Object.prototype.toString.call(new Map()); // "[object Map]"Object.prototype.toString.call(function* () {}); // "[object GeneratorFunction]"Object.prototype.toString.call(Promise.resolve()); // "[object Promise]"// ... などなど
独自クラスの既定のオブジェクトタグ
クラスを作成すると、 JavaScript は既定で "Object" というタグをつけます。
class ValidatorClass {}Object.prototype.toString.call(new ValidatorClass()); // "[object Object]"
toStringTag
を利用して、独自のカスタムタグを設定することができるようになりました。
class ValidatorClass { get [Symbol.toStringTag]() { return "Validator"; }}Object.prototype.toString.call(new ValidatorClass()); // "[object Validator]"
すべての DOM プロトタイプオブジェクトで利用可能な toStringTag
WebIDL の仕様変更が 2020 年半ばに行われた関係で、ブラウザーはすべての DOM プロトタイプオブジェクトにSymbol.toStringTag
プロパティを追加するようになりました。例えば、HTMLButtonElement
のSymbol.toStringTag
プロパティにアクセスするには次のようにします。
const test = document.createElement("button");test.toString(); // "[object HTMLButtonElement]"test[Symbol.toStringTag]; // "HTMLButtonElement"
仕様書
Specification |
---|
ECMAScript® 2026 Language Specification # sec-symbol.tostringtag |