Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.
* Einige Teile dieser Funktion werden möglicherweise unterschiedlich gut unterstützt.
Das Set-Objekt ermöglicht es Ihnen, eindeutige Werte beliebigen Typs zu speichern, egal ob primitive Werte oder Objektverweise.
Set-Objekte sind Sammlungen von Werten. Ein Wert im Set darf nur einmal vorkommen; er ist einzigartig in der Sammlung des Sets. Sie können die Elemente eines Sets in der Einfügereihenfolge durchlaufen. Die Einfügereihenfolge entspricht der Reihenfolge, in der jedes Element mit der add() Methode erfolgreich in das Set eingefügt wurde (das heißt, es war kein identisches Element bereits im Set vorhanden, als add() aufgerufen wurde).
Die Spezifikation erfordert, dass Sets so implementiert werden, dass sie im Durchschnitt Zugriffzeiten bieten, die sublinear zur Anzahl der Elemente in der Sammlung sind. Daher könnte es intern als Hashtabelle (mit O(1)-Suche), Suchbaum (mit O(log(N))-Suche) oder jeder anderen Datenstruktur dargestellt sein, solange die Komplexität besser als O(N) ist.
Die Wertgleichheit basiert auf dem SameValueZero Algorithmus. (Früher wurde SameValue verwendet, was 0 und -0 als verschieden behandelte. Prüfen Sie die Browser-Kompatibilität.) Das bedeutet, NaN wird als gleich NaN angesehen (obwohl NaN !== NaN) und alle anderen Werte gelten als gleich gemäß der Semantik des === Operators. Auch für Objektschlüssel basiert die Gleichheit auf der Objektidentität. Sie werden durch Referenz und nicht durch Wert verglichen. Siehe Verwendung des Set-Objekts für Beispiele.
Die has-Methode prüft, ob ein Wert im Set ist, und nutzt dabei einen Ansatz, der im Durchschnitt schneller ist als das Testen der meisten der zuvor hinzugefügten Elemente im Set. Insbesondere ist sie im Durchschnitt schneller als die Array.prototype.includes-Methode, wenn ein Array die gleiche Länge wie die Größe eines Sets hat.
Das Set-Objekt bietet einige Methoden, die Ihnen erlauben, Sets wie mathematische Operationen zu kombinieren. Diese Methoden umfassen:
| 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) | Boolean | A∩B=∅A\cap B = \empty | |
| A.isSubsetOf(B) | Boolean | A⊆BA\subseteq B | |
| A.isSupersetOf(B) | Boolean | A⊇BA\supseteq B |
Um sie universeller verwendbar zu machen, akzeptieren diese Methoden nicht nur Set-Objekte, sondern alles, was set-ähnlich ist.
Alle Set-Zusammensetzungs-Methoden erfordern, dass this eine echte Set-Instanz ist, aber ihre Argumente müssen nur set-ähnlich sein. Ein set-ähnliches Objekt ist ein Objekt, das Folgendes bereitstellt:
Zum Beispiel sind Map Objekte set-ähnlich, weil sie auch size, has(), und keys() haben, so dass sie sich in Set-Methoden verhalten wie Sets von Schlüsseln:
Hinweis: Das set-ähnliche Protokoll ruft die keys()-Methode statt [Symbol.iterator]() auf, um Elemente zu produzieren. Dies dient dazu, Maps als gültige set-ähnliche Objekte zu etablieren, da für Maps der Iterator Einträge produziert, aber die has()-Methode Schlüssel nimmt.
Arrays sind nicht set-ähnlich, weil sie keine has()-Methode oder die size-Eigenschaft haben und ihre keys()-Methode Indizes statt Elemente produziert. WeakSet Objekte sind ebenfalls nicht set-ähnlich, weil sie keine keys()-Methode haben.
Browser-Set-artige Objekte (oder "setlike objects") sind Web API Schnittstellen, die sich in vielerlei Hinsicht wie ein Set verhalten.
Genau wie Set können Elemente in der gleichen Reihenfolge durchlaufen werden, in der sie zum Objekt hinzugefügt wurden. Set-ähnliche Objekte und Set haben auch Eigenschaften und Methoden, die denselben Namen und dasselbe Verhalten teilen. Allerdings erlauben sie, anders als Set, nur einen spezifischen vordefinierten Typ für jeden Eintrag.
Die erlaubten Typen sind in der IDL-Definition der Spezifikation festgelegt. Zum Beispiel ist GPUSupportedFeatures ein Set-artiges Objekt, das Zeichenfolgen als Schlüssel/Wert verwenden muss. Dies ist in der IDL-Definition der Spezifikation unten definiert:
Set-ähnliche Objekte sind entweder schreibgeschützt oder schreibbar (siehe das readonly-Schlüsselwort in der IDL oben).
Die Methoden und Eigenschaften haben dasselbe Verhalten wie die entsprechenden Entitäten in Set, mit Ausnahme der Beschränkung auf die Typen des Eintrags.
Nachfolgend sind Beispiele für schreibgeschützte Set-artige Browser-Objekte:
Nachfolgend sind Beispiele für schreibbare Set-artige Browser-Objekte:
Erstellt ein neues Set-Objekt.
Die Konstruktorfunktion, die zum Erstellen abgeleiteter Objekte verwendet wird.
Diese Eigenschaften sind auf Set.prototype definiert und werden von allen Set-Instanzen geteilt.
Set.prototype.constructorDie Konstruktorfunktion, die das Instanzobjekt erstellt hat. Für Set-Instanzen ist der Anfangswert der Set-Konstruktor.
Set.prototype.sizeGibt die Anzahl der Werte im Set-Objekt zurück.
Set.prototype[Symbol.toStringTag]Der Anfangswert der [Symbol.toStringTag]-Eigenschaft ist der String "Set". Diese Eigenschaft wird in Object.prototype.toString() verwendet.
Fügt den angegebenen Wert in das Set ein, falls er noch nicht vorhanden ist.
Set.prototype.clear()Entfernt alle Elemente aus dem Set-Objekt.
Set.prototype.delete()Entfernt den angegebenen Wert aus diesem Set, falls er im Set ist.
Set.prototype.difference()Nimmt ein Set und gibt ein neues Set zurück, das Elemente in diesem Set, aber nicht im angegebenen Set enthält.
Set.prototype.entries()Gibt ein neues Iteratorobjekt zurück, das ein Array von [value, value] für jedes Element im Set-Objekt in Einfügereihenfolge enthält. Dies ist ähnlich dem Map-Objekt, so dass der Schlüssel jedes Eintrags derselbe ist wie der Wert für ein Set.
Set.prototype.forEach()Ruft callbackFn einmal für jeden im Set-Objekt vorhandenen Wert in Einfügereihenfolge auf. Wenn ein thisArg-Parameter angegeben wird, wird er als this-Wert für jede Aufruf von callbackFn verwendet.
Set.prototype.has()Gibt einen Boolean an, der zeigt, ob der angegebene Wert in diesem Set vorhanden ist oder nicht.
Set.prototype.intersection()Nimmt ein Set und gibt ein neues Set zurück, das Elemente sowohl in diesem Set als auch im angegebenen Set enthält.
Set.prototype.isDisjointFrom()Nimmt ein Set und gibt einen Boolean zurück, der anzeigt, ob dieses Set keine Elemente mit dem gegebenen Set gemeinsam hat.
Set.prototype.isSubsetOf()Nimmt ein Set und gibt einen Boolean zurück, der anzeigt, ob alle Elemente dieses Sets im angegebenen Set sind.
Set.prototype.isSupersetOf()Nimmt ein Set und gibt einen Boolean zurück, der anzeigt, ob alle Elemente des angegebenen Sets in diesem Set sind.
Set.prototype.keys()Ein Alias für Set.prototype.values().
Set.prototype.symmetricDifference()Nimmt ein Set und gibt ein neues Set zurück, das Elemente enthält, die entweder in diesem Set oder im angegebenen Set, aber nicht in beiden vorhanden sind.
Set.prototype.union()Nimmt ein Set und gibt ein neues Set zurück, das Elemente enthält, die in entweder oder beiden dieses Sets und dem gegebenen Set vorhanden sind.
Set.prototype.values()Gibt ein neues Iteratorobjekt zurück, das die Werte für jedes Element im Set-Objekt in Einfügereihenfolge liefert.
Set.prototype[Symbol.iterator]()Gibt ein neues Iteratorobjekt zurück, das die Werte für jedes Element im Set-Objekt in Einfügereihenfolge liefert.
Die Iteration über ein Set besucht Elemente in der Einfügereihenfolge.
| ECMAScript® 2027 Language Specification # sec-set-objects |
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
Der Bauplan für ein besseres Internet.
Teile dieses Inhalts sind ©1998–2026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter einer Creative-Commons-Lizenz.