Symbol.for(key) メソッドは引数で与えられたキーでランタイム全体のシンボルレジストリ内に存在しているシンボルを検索し、見つかった場合それを返します。さもなければ、新しいシンボルがこのキーでグローバルシンボルレジストリ内に生成されます。

構文

Symbol.for(key);

引数

key
必須の文字列です。シンボルに対するキー(シンボルの説明のためにも使用されます)。

戻り値

見つかった場合は指定したキーを持つ既存のシンボルを、さもなければ新しいシンボルが作成されて返されます。

説明

Symbol() と対照的に、Symbol.for() 関数はグローバルシンボルレジストリリスト内で利用可能なシンボルを生成します。Symbol.for() は必ずしもすべての呼び出しで新しいシンボルを生成するわけでなく、引数で与えられた key をもつシンボルがレジストリ内にすでに存在しているかどうか最初に調べます。存在している場合は、そのシンボルが返されます。引数で与えられたキーをもつシンボルが見つからない場合、Symbol.for() は新しいグローバルシンボルを生成します。

グローバルシンボルレジストリ

グローバルシンボルレジストリは次のレコード構造をもつリストで、値は空で初期化されます:

グローバルシンボルレジストリ内のレコード
フィールド名
[[key]] シンボルを識別するための文字列キー。
[[symbol]] グローバルに格納されているシンボル。

Symbol.for('foo'); // create a new global symbol
Symbol.for('foo'); // retrieve the already created symbol

// Same global symbol, but not locally
Symbol.for('bar') === Symbol.for('bar'); // true
Symbol('bar') === Symbol('bar'); // false

// The key is also used as the description
var sym = Symbol.for('mario');
sym.toString(); // "Symbol(mario)"

独自のグローバルシンボルキーとその他の(ライブラリコード)グローバルシンボルとの名前の衝突を避けるために、シンボルの先頭にプレフィックスを付加すると良いでしょう:

Symbol.for("mdn.foo");
Symbol.for("mdn.bar");

仕様

仕様 状況 コメント
ECMAScript 2015 (6th Edition, ECMA-262)
Symbol.for の定義
標準 初回定義。
ECMAScript Latest Draft (ECMA-262)
Symbol.for の定義
ドラフト  

ブラウザー実装状況

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeEdge MobileAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
基本対応Chrome 完全対応 40Edge 完全対応 ありFirefox 完全対応 36IE 未対応 なしOpera 完全対応 ありSafari 完全対応 9WebView Android 完全対応 40Chrome Android 完全対応 40Edge Mobile 完全対応 ありFirefox Android 完全対応 36Opera Android 完全対応 ありSafari iOS 完全対応 9Samsung Internet Android 完全対応 ありnodejs 完全対応 あり

凡例

完全対応  
完全対応
未対応  
未対応

関連情報

ドキュメントのタグと貢献者

このページの貢献者: segayuu, dskmori, kenmori, shide55
最終更新者: segayuu,