Was ist der Unterschied zwischen ES6 Map und WeakMap?
Suchen diese und diese MDN-Seiten, wie es scheint, der einzige Unterschied zwischen den Karten und WeakMaps ist eine fehlende Eigenschaft "Größe" für WeakMaps. Aber ist es wahr? Was ist der Unterschied zwischen Ihnen?
InformationsquelleAutor der Frage Dmitrii Sorin | 2013-03-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vom die sehr gleichen Seite, Abschnitt "Warum Schwach Ansehen?":
[Und das ist, warum Sie haben keine
size
Eigenschaft]wäre‐ die die "normal"
Map
s. Nicht erwähnt MDN, aber in der Harmonie Vorschlagauch dieseitems
keys
undvalues
generator, Methoden und Umsetzung derIterator
interface.InformationsquelleAutor der Antwort Bergi
Beide Verhalten sich anders, wenn ein Objekt referenziert, indem Sie Ihre Schlüssel/Werte gelöscht wird. Nehmen wir das folgende Beispiel-code:
Den oben IIFE ausgeführt wird, gibt es keine Möglichkeit, die wir verweisen können
{x: 12}
und{y: 12}
mehr. Der Garbage collector geht Voraus und löscht die Taste b Zeiger von "WeakMap" und entfernt auch{y: 12}
aus dem Speicher. Aber im Fall von "Map", der garbage collector nicht entfernt einen Zeiger von "Map" und auch nicht entfernen{x: 12}
aus dem Speicher.Zusammenfassung: WeakMap können garbage-collector zu tun, seiner Aufgabe, aber nicht Anzeigen.
Referenzen: http://qnimate.com/difference-between-map-and-weakmap-in-javascript/
InformationsquelleAutor der Antwort KShirish
Vielleicht das nächste Erklärung wird klarer sein, für jemanden.
Wie Sie sehen, nach dem entfernen
k1
Schlüssel aus dem Speicher-wir können immer noch darauf zugreifen Innenseite der Karte. Zur gleichen Zeit entfernenk2
Schlüssel WeakMap entfernt es auswm
als auch von Referenz.Deshalb WeakMap noch nicht enumerable-Methoden wie forEach, weil es keine solche Sache, wie die Liste der WeakMap Tasten, Sie sind nur Verweise auf andere Objekte.
InformationsquelleAutor der Antwort Rax Wunter
Weiterer Unterschied:
Noch kann ein string, number, oder boolean verwendet werden
WeakMap
- Taste. EinMap
kann primitiven Werte für Schlüssel.InformationsquelleAutor der Antwort Trevor Dixon
WeapMap in javascript besitzt keine Schlüssel oder Werte, die es gerade zu manipulieren Schlüsselwert mit einem eindeutige id und definieren-Eigenschaft für Schlüssel-Objekt.
weil es definieren-Eigenschaft zu
key
durch die MethodeObject.definePropert()
Schlüssel muss nicht primitiven Typ.und auch, weil WeapMap nicht enthalten, eigentlich Schlüssel-Wert-Paare, können wir keine length-Eigenschaft weakmap.
und auch die Stellgröße zugeordnet ist, zurück-Taste, garbage collector kann leicht sammeln Sie Schlüssel, wenn Sie in nicht verwenden.
Beispiel-code für die Umsetzung.
Referenz Umsetzung
InformationsquelleAutor der Antwort Ravi Sevta