--- title: Symbol.for() slug: Web/JavaScript/Reference/Global_Objects/Symbol/for tags: - ECMAScript 2015 - JavaScript - Method - Symbol translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/for ---
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');
仕様書 |
---|
{{SpecName('ESDraft', '#sec-symbol.for', 'Symbol.for')}} |
{{Compat("javascript.builtins.Symbol.for")}}