| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Guide/Keyed_collections#map_object | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
Dieses Kapitel stellt Sammlungen von Daten vor, die ber einen Schlssel indiziert sind; Map- und Set-Objekte enthalten Elemente, die in der Reihenfolge der Einfgung iterierbar sind.
Ein Map-Objekt ist eine Schlssel/Wert-Karte, die ihre Elemente in der Einfgereihenfolge iterieren kann.
Der folgende Code zeigt einige grundlegende Operationen mit einer Map. Weitere Beispiele und die vollstndige API finden Sie auch auf der Map-Referenzseite. Sie knnen eine for...of-Schleife verwenden, um fr jede Iteration ein Array von [key, value] zurckzugeben.
const sayings = new Map();
sayings.set("dog", "woof");
sayings.set("cat", "meow");
sayings.set("elephant", "toot");
sayings.size; // 3
sayings.get("dog"); // woof
sayings.get("fox"); // undefined
sayings.has("bird"); // false
sayings.delete("dog");
sayings.has("dog"); // false
for (const [key, value] of sayings) {
console.log(`${key} goes ${value}`);
}
// "cat goes meow"
// "elephant goes toot"
sayings.clear();
sayings.size; // 0
Traditionell wurden Objekte verwendet, um Strings auf Werte abzubilden. Objekte ermglichen es Ihnen, Schlssel auf Werte zu setzen, diese Werte abzurufen, Schlssel zu lschen und zu erkennen, ob etwas unter einem Schlssel gespeichert ist. Map-Objekte haben jedoch einige Vorteile, die sie zu besseren Karten machen.
Object sind Strings oder Symbole, whrend sie bei einer Map von jedem Wert sein knnen.Gre einer Map leicht ermitteln, whrend Sie bei einem Object die Gre manuell nachverfolgen mssen.Object hat ein Prototyp, daher gibt es standardmig Schlssel in der Karte. (Dies kann umgangen werden, indem map = Object.create(null) verwendet wird.)Diese drei Tipps knnen Ihnen helfen zu entscheiden, ob Sie eine Map oder ein Object verwenden sollten:
Ein WeakMap ist eine Sammlung von Schlssel/Wert-Paaren, deren Schlssel Objekte oder nicht-registrierte Symbole sein mssen, mit Werten jeden beliebigen JavaScript-Typs, und die keine starken Referenzen auf ihre Schlssel erstellen. Das bedeutet, dass die Prsenz eines Objekts als Schlssel in einer WeakMap das Objekt nicht daran hindert, vom Garbage Collector gesammelt zu werden. Sobald ein Objekt, das als Schlssel verwendet wird, gesammelt wurde, werden die entsprechenden Werte in jeder WeakMap ebenfalls zu Kandidaten fr die Mllabfuhr, solange sie nicht anderweitig stark referenziert werden. Der einzige primitive Typ, der als WeakMap-Schlssel verwendet werden kann, ist das Symbol genauer gesagt nicht-registrierte Symbole da nicht-registrierte Symbole garantiert einzigartig sind und nicht neu erstellt werden knnen.
Die WeakMap-API entspricht im Wesentlichen der Map-API. Eine WeakMap erlaubt jedoch nicht die Beobachtung der Lebendigkeit ihrer Schlssel, weshalb sie keine Enumeration erlaubt. Es gibt also keine Methode, um eine Liste der Schlssel in einer WeakMap zu erhalten. Wenn es eine gbe, wrde die Liste vom Zustand der Mllabfuhr abhngen, was zu Nicht-Determinismus fhren wrde.
Fr weitere Informationen und Beispielcode siehe auch "Warum WeakMap?" auf der WeakMap-Referenzseite.
Ein Anwendungsfall fr WeakMap-Objekte ist das Speichern privater Daten fr ein Objekt oder das Verbergen von Implementierungsdetails. Im folgenden Beispiel gehren die privaten Daten und Methoden innerhalb des Objekts und werden im privates-Objekt gespeichert, das eine WeakMap ist. Alles, was auf der Instanz und dem Prototyp exponiert ist, ist ffentlich; alles andere ist von der Auenwelt unzugnglich, da privates nicht aus dem Modul exportiert wird.
const privates = new WeakMap();
export default function Public() {
const me = {
// Private data goes here
};
privates.set(this, me);
}
Public.prototype.method = function () {
const me = privates.get(this);
// Do stuff with private data in `me`
//
};
Hinweis: Dieser Anwendungsfall kann jetzt mit Klassen und privaten Feldern implementiert werden.
Set-Objekte sind Sammlungen von einzigartigen Werten. Sie knnen ihre Elemente in der Einfgereihenfolge iterieren. Ein Wert in einem Set kann nur einmal vorkommen; er ist einzigartig in der Sammlung des Set.
Der folgende Code zeigt einige grundlegende Operationen mit einem Set. Weitere Beispiele und die vollstndige API finden Sie auch auf der Set-Referenzseite.
const mySet = new Set();
mySet.add(1);
mySet.add("some text");
mySet.add("foo");
mySet.has(1); // true
mySet.delete("foo");
mySet.size; // 2
for (const item of mySet) {
console.log(item);
}
// 1
// "some text"
Sie knnen ein Array aus einem Set mit Array.from oder der Spread-Syntax erstellen. Der Set-Konstruktor akzeptiert auch ein Array, um in die andere Richtung zu konvertieren.
Hinweis:
Set-Objekte speichern einzigartige Wertealle doppelten Elemente aus einem Array werden beim Konvertieren gelscht!
Array.from(mySet);
[...mySet2];
mySet2 = new Set([1, 2, 3, 4]);
Traditionell wurde eine Menge von Elementen in vielen Situationen in Arrays in JavaScript gespeichert. Das Set-Objekt hat jedoch einige Vorteile:
arr.splice(arr.indexOf(val), 1)) ist sehr langsam.Set-Objekte ermglichen das Lschen von Elementen nach ihrem Wert. Bei einem Array mssten Sie splice basierend auf dem Index eines Elements verwenden.NaN kann mit indexOf in einem Array nicht gefunden werden.Set-Objekte speichern einzigartige Werte. Sie mssen Duplikate nicht manuell nachverfolgen.WeakSet-Objekte sind Sammlungen von Garbage-collectable-Werten, einschlielich Objekten und nicht-registrierten Symbolen. Ein Wert im WeakSet kann nur einmal vorkommen. Er ist einzigartig in der Sammlung des WeakSet.
Die Hauptunterschiede zum Set-Objekt sind:
Sets sind WeakSets Sammlungen von Objekten oder Symbolen nur, und nicht von beliebigen Werten jedweden Typs.WeakSet ist schwach: Referenzen auf Objekte in der Sammlung werden schwach gehalten. Wenn es keine andere Referenz auf ein im WeakSet gespeichertes Objekt gibt, knnen sie vom Garbage Collector gesammelt werden. Das bedeutet auch, dass es keine Liste der aktuell in der Sammlung gespeicherten Objekte gibt.WeakSets sind nicht aufzhlbar.Die Einsatzmglichkeiten von WeakSet-Objekten sind begrenzt. Sie lecken keinen Speicher, daher kann es sicher sein, DOM-Elemente als Schlssel zu verwenden und sie zum Beispiel fr Tracking-Zwecke zu markieren.
Sowohl die Schlsselgleichheit von Map-Objekten als auch die Wertgleichheit von Set-Objekten basieren auf dem SameValueZero-Algorithmus:
===.-0 und +0 werden als gleich angesehen.NaN wird als sich selbst gleich angesehen (im Gegensatz zu ===).Der Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |