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)"

構文

js
Symbol.for(key)

引数

key

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

返値

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

解説

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

Symbol.for() の使用

js
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)"

グローバルシンボルキーや他の(ライブラリーコードの)グローバルシンボルとの名前の衝突を避けるために、シンボルの前に接頭辞をつけると良いかもしれません。

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

仕様書

Specification
ECMAScript® 2025 Language Specification
# sec-symbol.for

ブラウザーの互換性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
for

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

関連情報