Symbol.toStringTag

Symbol.toStringTag ウェルノウンシンボルは、オブジェクトを説明する既定の文字列の作成に使用される文字列値のプロパティです。 Object.prototype.toString() メソッドによって内部的にアクセスされます。

Symbol.toStringTag のプロパティ属性
書込可能 不可
列挙可能 不可
設定可能 不可

既定のタグ

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 シンボル

Object.prototype.toString.call(new Map());       // "[object Map]"
Object.prototype.toString.call(function* () {}); // "[object GeneratorFunction]"
Object.prototype.toString.call(Promise.resolve()); // "[object Promise]"
// ... and more

独自クラスの既定のオブジェクトタグ

クラスを作成すると、 JavaScript は既定で "Object" というタグをつけます。

class ValidatorClass {}

Object.prototype.toString.call(new ValidatorClass()); // "[object Object]"

toStringTag による独自タグ

toStringTag を使えば、独自のタグを設定することができます。

class ValidatorClass {
  get [Symbol.toStringTag]() {
    return 'Validator';
  }
}

Object.prototype.toString.call(new ValidatorClass()); // "[object Validator]"

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

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

let test = document.createElement('button');
test.toString(); // Returns [object HTMLButtonElement]
test[Symbol.toStringTag];  // Returns HTMLButtonElement

仕様書

ブラウザーの互換性

BCD tables only load in the browser

関連情報