Movatterモバイル変換


[0]ホーム

URL:


MDN Web Docs

このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

Symbol.toStringTag

BaselineWidely available

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() を参照してください。

js
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 にインストールされます。MathJSON のようなコンストラクター以外のオブジェクトの場合、プロパティは静的プロパティとしてインストールされ、名前空間オブジェクト自体が文字列化できるようになります。コンストラクターが独自のtoString メソッドを提供することもあります(例えば、Intl.Locale)。この場合、[Symbol.toStringTag] プロパティは、明示的にObject.prototype.toString を呼び出した場合にのみ使用されます。

js
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" というタグをつけます。

js
class ValidatorClass {}Object.prototype.toString.call(new ValidatorClass()); // "[object Object]"

toStringTag を利用して、独自のカスタムタグを設定することができるようになりました。

js
class ValidatorClass {  get [Symbol.toStringTag]() {    return "Validator";  }}Object.prototype.toString.call(new ValidatorClass()); // "[object Validator]"

すべての DOM プロトタイプオブジェクトで利用可能な toStringTag

WebIDL の仕様変更が 2020 年半ばに行われた関係で、ブラウザーはすべての DOM プロトタイプオブジェクトにSymbol.toStringTag プロパティを追加するようになりました。例えば、HTMLButtonElementSymbol.toStringTag プロパティにアクセスするには次のようにします。

js
const test = document.createElement("button");test.toString(); // "[object HTMLButtonElement]"test[Symbol.toStringTag]; // "HTMLButtonElement"

仕様書

Specification
ECMAScript® 2026 Language Specification
# sec-symbol.tostringtag

ブラウザーの互換性

関連情報

Help improve MDN

Learn how to contribute.

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp