Movatterモバイル変換


[0]ホーム

URL:


  1. 開発者向けのウェブ技術
  2. JavaScript
  3. JavaScript リファレンス
  4. 標準組み込みオブジェクト
  5. Symbol
  6. toStringTag

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

View in EnglishAlways switch to English

Symbol.toStringTag

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨2017年4月⁩.

Symbol.toStringTag は静的データプロパティで、ウェルノウンシンボルSymbol.toStringTag を表します。Object.prototype.toString()this に対して、このオブジェクトの型を表す文字列を持つプロパティを、このシンボルで探します。

試してみましょう

class ValidatorClass {  get [Symbol.toStringTag]() {    return "Validator";  }}console.log(Object.prototype.toString.call(new ValidatorClass()));// 予想される結果: "[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]"// … などなど

組み込み 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