Symbol.for()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2015.
Symbol.for()
は静的メソッドで、引数で与えられたキーでランタイム全体のシンボルレジストリー内に存在しているシンボルを検索し、見つかった場合はそれを返します。さもなければ、新しいシンボルがこのキーでグローバルシンボルレジストリー内に生成されます。
試してみましょう
console.log(Symbol.for("bar") === Symbol.for("bar"));
// Expected output: true
console.log(Symbol("bar") === Symbol("bar"));
// Expected output: false
const symbol1 = Symbol.for("foo");
console.log(symbol1.toString());
// Expected output: "Symbol(foo)"
構文
Symbol.for(key)
引数
key
-
必須の文字列です。シンボルに対するキー(シンボルの説明のためにも使用されます)。
返値
見つかった場合は指定したキーを持つ既存のシンボルです。さもなければ新しいシンボルを作成して返します。
解説
Symbol()
と対照的に、Symbol.for()
関数はグローバルシンボルレジストリーリスト内で利用可能なシンボルを生成します。Symbol.for()
は必ずしもすべての呼び出しで新しいシンボルを生成するわけでなく、引数で与えられた key
をもつシンボルがレジストリー内にすでに存在しているかどうか最初に調べます。存在している場合は、そのシンボルが返されます。引数で与えられたキーをもつシンボルが見つからない場合、Symbol.for()
は新しいグローバルシンボルを生成します。
例
Symbol.for() の使用
Symbol.for("foo"); // 新しいグローバルシンボルを作成
Symbol.for("foo"); // 既存のシンボルを受け取る
// 同じグローバルシンボルだが、ローカルのもの
Symbol.for("bar") === Symbol.for("bar"); // true
Symbol("bar") === Symbol("bar"); // false
// キーは説明としても使用される
const sym = Symbol.for("mario");
sym.toString(); // "Symbol(mario)"
グローバルシンボルキーや他の(ライブラリーコードの)グローバルシンボルとの名前の衝突を避けるために、シンボルの前に接頭辞をつけると良いかもしれません。
Symbol.for("mdn.foo");
Symbol.for("mdn.bar");
仕様書
Specification |
---|
ECMAScript® 2025 Language Specification # sec-symbol.for |
ブラウザーの互換性
Report problems with this compatibility data on GitHubdesktop | mobile | server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
for |
Legend
Tip: you can click/tap on a cell for more information.
- Full support
- Full support