引数で与えられたキーでランタイム全体のシンボルレジストリ内に存在しているシンボルを検索し、見つかった場合それを返します。さもなければ、新しいシンボルがこのキーでグローバルシンボルレジストリ内に生成されます。
構文
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 2017 Draft (ECMA-262) Symbol.for の定義 |
ドラフト |
ブラウザ実装状況
機能 | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
基本サポート | 40 | 36.0 (36.0) | 未サポート | 未サポート | 未サポート |
機能 | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
基本サポート | 未サポート | 未サポート | 36.0 (36.0) | 未サポート | 未サポート | 未サポート |