Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2015年9月以降、すべてのブラウザーで利用可能です。
* この機能の一部は、対応レベルが異なる場合があります。
WeakSet は、オブジェクトや未登録シンボルなど、ガベージコレクションの対象となる値の集合です。WeakSet 内の値は 1 回しか出現できません。つまり、WeakSet の集合内では固有の値である必要があります。
WeakSet の値は、ガベージコレクションの対象となるものでなければなりません。ほとんどの プリミティブデータ型 は任意に作成でき、持続期間がないため、格納することはできません。オブジェクトや未登録シンボルは、ガベージコレクションの対象となるため、格納することが可能です。
Set オブジェクトとの主な違いは下記の通りです。
WeakSet はオブジェクトとシンボルのみのコレクションです。 Set のように、任意の型の自由な値を入れることはできません。
WeakSet は弱い参照です。コレクション内のオブジェクトへの弱い参照で保持されます。 WeakSet 内に格納されているオブジェクトへの参照が他にない場合、ガベージコレクションにより削除されます。
メモ: これは、このコレクションに格納されているオブジェクトの現在のリストが存在しないことを意味します。 WeakSets は列挙可能ではありません。
通常の Set と同様に、値の等価性は SameValueZero アルゴリズムに基づきます。これは === 演算子と同じ動作をします。WeakSet がオブジェクトおよびシンボル値のみを保持できるためです。オブジェクト値の場合、等価性はオブジェクトの同一性に基づきます。これらは値ではなく、参照によって比較されます。
新しいWeakSetオブジェクトを生成します。
これらのプロパティは WeakSet.prototype で定義されており、すべての WeakSet インスタンスで共有されています。
WeakSet.prototype.constructorインスタンスオブジェクトを作成したコンストラクター関数です。WeakSet インスタンスの場合、初期値は WeakSet コンストラクターになります。
WeakSet.prototype[Symbol.toStringTag][Symbol.toStringTag] プロパティの初期値は、文字列 "WeakSet" です。このプロパティは Object.prototype.toString() で使用されています。
指定された値がまだこの集合に存在しない場合、その値をこの集合に追加します。
WeakSet.prototype.delete()指定された値を、この集合に存在する場合は、この集合から削除します。
WeakSet.prototype.has()指定された値が WeakSet オブジェクト内の要素に含まれているかどうかを示す論理値を返します。
foo !== bar であることに注意してください。これらは似たオブジェクトですが、まったく同じオブジェクトではありません。したがって、両方のオブジェクトが集合に追加されます。
自分自身を再帰的に呼び出す関数は、どのオブジェクトが処理済みであるかを追跡することで、循環したデータ構造を防ぐ必要があります。
WeakSet はこの目的に理想的です。
ここで、 WeakSet は最初の実行時に作成され、その後の関数呼び出しのたびに(内部の _refs 引数を使用して)渡されます。
オブジェクトの数や探索順序は重要ではないので、オブジェクトの参照を追跡するには WeakSet のほうが Set よりも、特に巨大な数のオブジェクトを処理する場合にはよりふさわしい(そして性能もよい)ものです。
| ECMAScript® 2027 Language Specification # sec-weakset-objects |
ブラウザー互換性一覧表を表示するには、JavaScript を有効にしてください。
より良いインターネットのための青写真。
このコンテンツの一部は、©1998–2026 個人の mozilla.org 協力者です。コンテンツはクリエイティブ・コモンズ・ライセンスのもとで利用できます。