Symbol.toStringTag

well-known symbolであるSymbol.toStringTagは、オブジェクトを説明するデフォルト文字列の作成に使用される文字列値のプロパティです。Object.prototype.toString()メソッドによって内部的にアクセスされます。

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

説明

多くのJavaScriptの型にはデフォルトでタグがついています。

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を使えば、あなたオリジナルのタグを設定することができます。

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

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

仕様

Specification Status Comment
ECMAScript 2015 (6th Edition, ECMA-262)
Symbol.toStringTag の定義
標準 Initial definition.
ECMAScript Latest Draft (ECMA-262)
Symbol.toStringTag の定義
ドラフト

ブラウザ実装状況

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
toStringTagChrome 完全対応 49Edge 完全対応 15Firefox 完全対応 51IE 未対応 なしOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 49Chrome Android 完全対応 49Firefox Android 完全対応 51Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 6.0.0
完全対応 6.0.0
完全対応 4.0.0
無効
無効 From version 4.0.0: this feature is behind the --harmony runtime flag.

凡例

完全対応  
完全対応
未対応  
未対応
ユーザーが明示的にこの機能を有効にしなければなりません。
ユーザーが明示的にこの機能を有効にしなければなりません。

関連情報