Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
* Some parts of this feature may have varying levels of support.
Set オブジェクトは、プリミティブ値やオブジェクト参照を問わず、あらゆる型で多数の一意の値を格納することができます。
Set オブジェクトは値の集合です。 Set に重複する値は格納出来ません。 Set 内の値は集合内で一意になります。 Set はその要素について挿入順で反復処理を行うことができます。挿入順は、各要素が add メソッドによって正常に Set に挿入された順番に対応します。
仕様書では Set の実装について「平均アクセス時間が集合内の要素数に対して線形探索以下」であることが要求されています。したがって、計算量が O(N) よりも優れている限り、内部的にはハッシュ表(ルックアップは O(1))、探索木(ルックアップは O(log(N)))、または他のデータ構造として表すことができます。
値の等値性は、 SameValueZero アルゴリズムに基づいています。(以前は SameValue を使用しており、0 と -0 は異なるものとして扱われていました。詳しくはブラウザーの互換性の "Key equality for -0 and 0" を参照してください。)つまり、 NaN は NaN と同じとみなされ(例え NaN !== NaN であっても)、それ以外の値は === 演算子の挙動に従って等しいとみなされます。
has メソッドは、値が Set 内にあるかどうかをチェックします。これは、以前に Set に追加された要素のほとんどを確認するよりも平均すると高速なアプローチを使用します。特に、 Array オブジェクトの length が Set オブジェクトの size と等しい場合、平均して Array.prototype.includes メソッドより速くなります。
Set オブジェクトは、数学演算のように集合を合成するためのいくつかのメソッドを提供します。これらのメソッドには、以下のようなものがあります。
| A.difference(B) | Set | A∖BA\setminus B | |
| A.intersection(B) | Set | A∩BA\cap B | |
| A.symmetricDifference(B) | Set | (A∖B)∪(B∖A)(A\setminus B)\cup(B\setminus A) | |
| A.union(B) | Set | A∪BA\cup B | |
| A.isDisjointFrom(B) | 論理型 | A∩B=∅A\cap B = \empty | |
| A.isSubsetOf(B) | 論理型 | A⊆BA\subseteq B | |
| A.isSupersetOf(B) | 論理型 | A⊇BA\supseteq B |
より一般化できるように、これらのメソッドは Set オブジェクトだけでなく、Set 風オブジェクトも受け入れます。
すべての Set 合成メソッドでは、 this が実際の Set インスタンスであることが要求されますが、引数は Set 風であるだけで構いません。Set 風オブジェクトとは、次のことを提供するオブジェクトです。
例えば、Map オブジェクトは Set 風です。なぜなら、size、has()、keys() を保有しており、Set メソッドで使用する際に、キーの Set のように動作するからです。
メモ: Set 風プロトコルは、要素を生成するために keys() メソッドを [Symbol.iterator]() の代わりに呼び出します。これは、Map を有効な Set 風オブジェクトにするためです。なぜなら、Map の場合、イテレーターは項目を生成しますが、has() メソッドはキーを取得するからです。
配列は、has() メソッドや size プロパティを持っておらず、keys() メソッドが要素ではなくインデックスを生成するため、Set 風ではありません。WeakSet オブジェクトも、keys() メソッドを持たないため、Set 風ではありません。
ブラウザーの Set 風オブジェクト(または「集合風オブジェクト」)とは、ウェブ API の中で多くの点で Set のように動作するインターフェイスです。
Set のように、要素はオブジェクトに追加した順番に反復処理することができます。 Set 風オブジェクトと Set には、名前と動作が同じプロパティとメソッドもあります。 しかし Set とは異なり、各アイテムには特定の定義済みの型しか使用できません。
許可されている型には仕様書の IDL 定義に設定されています。 例えば、 GPUSupportedFeatures は Set 風オブジェクトですが、キーと値として文字列を使用する必要があります。 これは下記の仕様 IDL で定義されています。
Set 風オブジェクトは、読み取り専用か読み書き可能かのどちらかです(上記の IDL で readonly キーワードを確認してください。
メソッドとプロパティは Set の等価なエンティティと同じ動作をしますが、項目のの型に制限があります。
以下のものが、読み取り専用の Set 風ブラウザーオブジェクトの例です。
以下のものが、読み書き可能な Set 風ブラウザーオブジェクトの例です。
新しい Set オブジェクトを生成します。
派生オブジェクトを生成するために使用されるコンストラクター関数です。
これらのプロパティは Set.prototype で定義されており、すべての Set インスタンスから共有されます。
Set.prototype.constructorこのインスタンスオブジェクトを生成したコンストラクター関数です。 Set インスタンスの場合、初期値は Set コンストラクターです。
Set.prototype.sizeSet オブジェクト内の値の数を返します。
Set.prototype[Symbol.toStringTag][Symbol.toStringTag] プロパティの初期値は文字列の "Set" です。 このプロパティは Object.prototype.toString() で利用されます。
この Set オブジェクト内に同じ値を持つ要素がまだ存在しなかった場合、指定した値を持つ新しい要素を Set オブジェクトに挿入します。
Set.prototype.clear()この Set オブジェクトからすべての要素を取り除きます。
Set.prototype.delete()value に関連した要素を取り除き、要素の削除に成功したかどうかを示す論理値を返します。 Set.prototype.has(value) はその後は false を返します。
Set.prototype.difference()集合を取り、この Set の中にあって与えられた集合の中にない要素が入った新しい Set を返します。
Set.prototype.entries()Set オブジェクト内の各要素を [value, value] の配列の形で挿入順で返す、新しいイテレーターオブジェクトを返します。これは Map オブジェクトと似ていますが、それぞれの項目の key が Set では value と同じになります。
Set.prototype.forEach()この Set オブジェクト内に存在する各値に対して、挿入順に一度ずつ callbackFn を呼びます。thisArg 引数が指定された場合、それぞれの callbackFn の呼び出しにおいて this の値として使用されます。
Set.prototype.has()この Set オブジェクト内に引数で与えられた値をもつ要素が存在するかどうかを示す論理値を返します。
Set.prototype.intersection()集合を取り、この Set の中と与えられた集合の中の両方にある要素が入った新しい Set を返します。
Set.prototype.isDisjointFrom()集合を取り、この Set の中に与えられた集合の中の要素がないかどうかを示す論理値を返します。
Set.prototype.isSubsetOf()集合を取り、この Set の中のすべての要素が与えられた集合の中に存在するかどうかを示す論理値を返します。
Set.prototype.isSupersetOf()集合を取り、与えられた集合の中のすべての要素がこの Set に存在するかどうかを示す論理値を返します。
Set.prototype.keys()Set.prototype.values() の別名です。
Set.prototype.symmetricDifference()集合を取り、この Set または与えられた集合の中に存在するものの、両方には存在しない要素が入った新しい Set を返します。
Set.prototype.union()集合を取り、この Set または与えられた集合の中のどちらか、または両方に存在する要素が入った新しい Set を返します。
Set.prototype.values()Set オブジェクト内の各要素の値を挿入順に返す、新しいイテレーターオブジェクトを返します。
Set.prototype[Symbol.iterator]()Set オブジェクト内の各要素の値を挿入順に返す、新しいイテレーターオブジェクトを返します。
挿入順に要素を訪問する集合に対する反復処理です。
| ECMAScript® 2027 Language Specification # sec-set-objects |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 2025年8月18日 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.