Ein WeakMap-Objekt ist eine Sammlung von Schlüssel-/Wertpaaren, wobei die Schlüssel schwache Referenzen sind. Die Schlüssel müssen Objekte sein, aber die Werte können alles sein. Grammatikneue WeakMap([iterierbar]) Parameter iterierbar beschreibenDer Schlüssel von WeakMap kann nur vom Typ „Objekt“ sein. Primitive Datentypen (wie etwa Symbole) können nicht als Schlüssel verwendet werden. Warum WeakMap?In JavaScript kann die Map-API implementiert werden, indem ihre vier API-Methoden zwei Arrays gemeinsam nutzen (eines für Schlüssel und eines für Werte). Wenn Sie einer solchen Zuordnung einen Wert zuweisen, werden sowohl der Schlüssel als auch der Wert an das Ende beider Arrays angehängt. Dadurch stimmen die Schlüssel- und Werteindizes in den beiden Arrays überein. Wenn Sie einen Wert aus der Karte abrufen, müssen Sie alle Schlüssel durchlaufen und dann den Index verwenden, um den entsprechenden Wert aus dem Array der gespeicherten Werte abzurufen. Eine solche Implementierung hat jedoch zwei große Nachteile. Erstens beträgt die Zeitkomplexität sowohl der Zuweisungs- als auch der Suchvorgänge O(n) (n ist die Anzahl der Schlüssel-Wert-Paare), da für beide Vorgänge zum Abgleichen das gesamte Array durchlaufen werden muss. Ein weiterer Nachteil besteht darin, dass es zu Speicherlecks kommen kann, da das Array immer einen Verweis auf jeden Schlüssel und Wert enthält. Solche Referenzen verhindern, dass der Garbage Collection-Algorithmus sie zurückfordert, selbst wenn keine anderen Referenzen vorhanden sind. Im Gegensatz dazu enthält die native WeakMap eine „schwache Referenz“ zu jedem Schlüsselobjekt. Dies bedeutet, dass die Garbage Collection korrekt ausgeführt werden kann, wenn keine anderen Referenzen vorhanden sind. Die Struktur der nativen WeakMap ist speziell und effektiv, und der für die Zuordnung verwendete Schlüssel ist nur gültig, wenn er nicht wiederverwendet wurde. Aufgrund dieser schwachen Referenz sind die Schlüssel von WeakMap nicht aufzählbar (es gibt keine Methode, um alle Schlüssel anzugeben). Wenn der Schlüssel aufzählbar ist, unterliegt seine Liste der Garbage Collection, was zu undefinierten Ergebnissen führt. Wenn Sie daher eine Liste der Schlüsselwerte dieses Objekttyps wünschen, sollten Sie eine Map verwenden. Wenn Sie einem Objekt Daten hinzufügen möchten und den Speicherbereinigungsmechanismus nicht beeinträchtigen möchten, können Sie grundsätzlich WeakMap verwenden. Eigentum
Der Wert der Längeneigenschaft ist 0.
Prototyp für den WeakMap-Konstruktor. Ermöglicht das Hinzufügen von Attributen zu allen WeakMap-Objekten. WeakMap-InstanzAlle WeakMap-Instanzen erben von WeakMap.prototype. Eigentum WeakMap.prototype.constructor Verfahren
Entfernen Sie das mit dem Schlüssel verknüpfte Objekt. Nach der Ausführung gibt WeakMap.prototype.has(key) false zurück.
Gibt das mit dem Schlüssel verknüpfte Objekt zurück, oder „undefined“ (wenn mit dem Schlüssel kein Objekt verknüpft ist).
Gibt einen Booleschen Wert zurück, basierend darauf, ob der Schlüssel mit dem Objekt verknüpft ist.
Legen Sie eine Reihe von schlüsselassoziierten Objekten in einer WeakMap fest und geben Sie dieses WeakMap-Objekt zurück. BeispielVerwenden von WeakMapconst wm1 = neue WeakMap(), wm2 = neue WeakMap(), wm3 = neue WeakMap(); const o1 = {}, o2 = Funktion(){}, o3 = Fenster; wm1.set(o1, 37); wm1.set(o2, "azerty"); wm2.set(o1, o2); // Wert kann alles sein, einschließlich eines Objekts oder einer Funktion wm2.set(o3, undefiniert); wm2.set(wm1, wm2); // Der Schlüssel und der Wert können jedes beliebige Objekt sein, sogar ein anderes WeakMap-Objekt wm1.get(o2); // "azerty" wm2.get(o2); // undefiniert, es gibt keinen Schlüssel o2 in wm2 wm2.get(o3); // undefiniert, der Wert ist undefiniert wm1.has(o2); // wahr wm2.has(o2); // falsch wm2.has(o3); // true (auch wenn der Wert nicht definiert ist) wm3.set(o1, 37); wm3.get(o1); // 37 wm1.has(o1); // wahr wm1.delete(o1); wm1.has(o1); // falsch Implementieren Sie eine WeakMap-Klasse mit einer .clear()-MethodeKlasse ClearableWeakMap { Konstruktor(init) { this._wm = neue WeakMap(init) } klar() { this._wm = neue WeakMap() } löschen(k) { gib dies zurück._wm.delete(k) } bekomme(k) { gib dies zurück._wm.get(k) } hat(k) { gib dies zurück._wm.has(k) } setze(k, v) { dies._wm.set(k, v) gib das zurück } } Spezifikation
Oben finden Sie den detaillierten Inhalt der ausführlichen Erläuterung zur Verwendung von JavaScript WeakMap. Weitere Informationen zu JavaScript WeakMap finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Installieren Sie mysql5.7.17 mit RPM unter Linux
mysqldump-Tool-Sicherung Sichern Sie die gesamte ...
In diesem Artikelbeispiel wird der spezifische Co...
Als ich kürzlich an einem Übungsprojekt arbeitete...
Inhaltsverzeichnis Überblick Indexdatenstruktur B...
Bevor wir Docker offiziell verwenden, machen wir ...
Voraussetzungen Um Container auf Windows Server a...
Vorwort In letzter Zeit dauert das Herunterfahren...
Schauen Sie sich zunächst das Wirkungsdiagramm an...
Aus beruflichen Gründen musste ich kürzlich Zahle...
1. PRIMARY KEY hinzufügen (Primärschlüsselindex) ...
Wie kann ich überprüfen, ob die Zeitzone des Dock...
Inhaltsverzeichnis Was ist asynchron? Warum brauc...
SQL-Anweisung DROP-TRIGGER WENN EXISTIERT sys_men...
Unterabfrage in der MySql-Datenbank: Unterabfrage...
Da ich selbst eine Webseite schreiben möchte, lern...