JavaScriptのSymbol.keyFor()関数とは?グローバルシンボルレジストリからキーを取得する方法
Symbol.keyFor()関数とは
JavaScriptのSymbol.keyFor()は、指定したシンボルに関連付けられたキー(文字列)を取得するための関数です。このキーは、グローバルシンボルレジストリと呼ばれる共有の登録簿から検索されます。
重要なポイントとして、Symbol.keyFor()がキーを返すのは、対象のシンボルがSymbol.for()によって作成され、グローバルシンボルレジストリに登録されている場合だけです。
一方、Symbol()で直接生成したシンボルはレジストリに登録されないため、Symbol.keyFor()に渡してもundefinedが返されます。
基本構文
Symbol.keyFor(sym)
- 引数 sym:キーを調べたいシンボル値を指定します。
- 戻り値:シンボルに紐づくキーの文字列。レジストリに存在しない場合はundefinedを返します。
サンプルコード
以下は、Symbol.keyFor()関数を使って、複数のシンボルからキーを取得して画面に表示する例です。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>JavaScript Symbol.keyFor() 関数</title>
<style>
body {
font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
}
div {
font-size: 20px;
font-weight: 500;
}
</style>
</head>
<body>
<h1>JavaScript Symbol.keyFor() 関数</h1>
<div class="sample"></div>
<button class="Btn">クリックしてください</button>
<h3>
上のボタンをクリックすると、各シンボルのキーが表示されます
</h3>
<script>
let fillEle = document.querySelector(".sample");
const symbol = Symbol.for("HELLO");
const symbol1 = Symbol.for("NEW");
const symbol2 = Symbol.for(711);
document.querySelector(".Btn").addEventListener("click", () => {
fillEle.innerHTML += "symbol = " + Symbol.keyFor(symbol) + "<br>";
fillEle.innerHTML += "symbol1 = " + Symbol.keyFor(symbol1) + "<br>";
fillEle.innerHTML += "symbol2 = " + Symbol.keyFor(symbol2) + "<br>";
});
</script>
</body>
</html>
このコードでは、Symbol.for()を使って「HELLO」「NEW」「711」という3つのキーを持つシンボルをあらかじめ作成しています。ボタンをクリックすると、それぞれのシンボルに対してSymbol.keyFor()が実行され、結果が順番に出力されます。数値の711を指定した場合は、文字列"711"に変換されてキーが返される点にも注目してください。
実行結果
ページを開いた直後の表示:

「クリックしてください」ボタンをクリックすると −

まとめ
- Symbol.keyFor()は、グローバルシンボルレジストリからシンボルに関連付けられたキーを取得する関数である。
- Symbol.for()で作成・登録されたシンボルに対しては、対応するキー文字列が返される。
- Symbol()で直接作成した一意なシンボルや未登録のシンボルに対しては、undefinedが返される。
-
JavaScriptの関数プロトタイプとは?仕組みと使い方を解説
JavaScriptで作成されたすべての関数には、JavaScriptエンジンによって自動的にprototypeプロパティが追加されます。このprototypeプロパティはオブジェクトであり、デフォルトではconstructorプロパティを含んでいます。関数のプロトタイプには、以下のようにしてアクセスできます。functionName.prototypeコンストラクタ関数を使ってオブジェクトを生成する場合、このprototypeプロパティを活用することで、同じコンストラクタから作成された複数のオブジェクト間でメソッドやプロパティを効率的に共有することができます。これにより、各インスタンスごとに
-
JavaScriptでのメソッド借用:call()・apply()・bind()の使い方を解説
JavaScriptでは、call()、apply()、bind()という3つのメソッドを使うことで、あるオブジェクトが持つメソッドを別のオブジェクトが「借用」できます。これは、本来そのメソッドを持たないオブジェクトに対して、thisの参照先を差し替えてメソッドを実行できる便利なテクニックです。 3つのメソッドの違い call():引数をカンマ区切りで個別に渡し、即座に関数を実行します。 apply():引数を配列(または配列風オブジェクト)として渡し、即座に関数を実行します。 bind():thisを固定した新しい関数を返すだけで、即座には実行されません。返された関数は後から好きなタイミン