Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
本章では、キーによって索引付けされたデータのコレクションを紹介します。Map および Set オブジェクトは挿入順に反復処理を行える要素を保持します。
Map オブジェクトはキーと値のマップで、挿入順に要素を反復処理することができます。
次のコードでは Map を用いたいくつかの基本的な操作を表しています。また、追加の例や全ての API については、 Map リファレンスページをご覧ください。 for...of ループを使って、各反復処理において [key, value] からなる配列を返しています。
伝統的に、objects は文字列を値に対応付けするのに使われてきました。オブジェクトを使うことで、キーを値に設定し、その値を取得し、キーを削除し、キーに対応する何かが格納されているかどうかを調べることができます。しかし、 Map オブジェクトには、より優れたマップとなるいくつかの利点があります。
Map と Object のどちらを使用すべきかを決めるには、下記の 3 つのヒントが役立つでしょう。
WeakMap キーと値のペアの集合であり、キーはオブジェクトまたは非登録シンボルでなければならず、値は任意の JavaScript 型で、キーへの強い参照を作成しません。つまり、オブジェクトが WeakMap のキーとして存在しても、そのオブジェクトがガベージコレクションの対象となることを妨げることはありません。キーとして使用されていたオブジェクトが回収された場合、そのオブジェクトに対応する WeakMap 内の値も、他の場所で強く参照されていない限り、ガベージコレクションの対象となります。 WeakMap のキーとして使用できる唯一のプリミティブ型はシンボル(より特定の非登録シンボル)です。非登録シンボルは一意であることが保証されており、再作成できないためです。
WeakMap API は本質的には Map API と同じです。 しかし、 WeakMap ではキーの生存状況を監視できないため、列挙もできません。そのため、 WeakMap 内のキーの一覧を取得する方法はありません。もしそのようなメソッドがあったとしても、一覧はガベージコレクションの状態に依存し、不確定性が生まれてしまいます。
詳細やサンプルコードについては、WeakMap リファレンスページの「なぜ WeakMap なのか?」もご覧ください。
WeakMap オブジェクトのよくある使用方法のひとつとして、オブジェクトに対するプライベートデータの格納、あるいは実装の細部の隠蔽があります。次の例では、プライベートなデータとメソッドはオブジェクトの内部に属していて、privates オブジェクト (WeakMap) に格納されています。インスタンスから露出する全てとプロトタイプは公開されています、他の全てのものは外部よりアクセスできません。 privates はモジュールからエクスポートされていません。
メモ: この用例はクラスとプライベートフィールドで実装されています。
Set オブジェクトは、値によって構成されるコレクションです。挿入順に要素を反復処理することができます。 Set の 1 つの値は 1 回だけ出現します。 Set のコレクション内では値は一意です。
次のコードでは Set を用いたいくつかの基本的な操作を表しています。また、追加の例や全ての API については、Set リファレンスページをご覧ください。
Array.from またはスプレッド構文を使用して Set から Array を生成することができます。また、Set コンストラクターを使って Array から Set へと逆変換することができます。
メモ: Set オブジェクトは一意の値を格納することにくれぐれも注意してください、重複した要素は配列から変換するときに削除されます。
伝統的に、要素の集合は多くの状況において JavaScript の配列に格納されてきました。しかし、新しい Set オブジェクトにはいくつかの利点があります。
WeakSet オブジェクトは、ガベージコレクション可能なオブジェクトのコレクションであり、オブジェクトと非登録シンボルを入れることができます。 WeakSet 内の 1 つのオブジェクトは 1 回だけ出現します。 WeakSet コレクション内では値は一意です。
Set オブジェクトとの主な違いは次の通りです。
WeakSet オブジェクトの使用例は限定的です。メモリーリークが発生しないようにするため、例えば、DOM 要素をキーとして使用し、監視するためにそれらにマーキングすることが安全に行なえます。
Map オブジェクトのキーの等値性と Set オブジェクトの値の等値性は両方とも、「SameValueZero アルゴリズム」に基づいています。
This page was last modified on 2026年3月19日 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.