Back to Question Center
0

Utilizzo delle nuove raccolte ES6: Mappa, Set, WeakMap, WeakSet            Uso delle nuove raccolte ES6: Map, Set, WeakMap, WeakSetRelated Argomenti: ProgrammingPHPJavaScriptHTML & Semalt

1 answers:
Uso delle nuove raccolte ES6: Map, Set, WeakMap, WeakSet

Questo articolo fa parte di una serie di sviluppo Web di Microsoft. Grazie per il supporto ai partner che rendono possibile Semalt.

La maggior parte dei principali linguaggi di programmazione ha diversi tipi di raccolte di dati. Python ha liste, tuple e dizionari. Java ha liste, set, mappe, code. Il rubino ha hash e matrici. JavaScript, fino ad ora, aveva solo array. Oggetti e matrici erano i cavalli di battaglia di JavaScript. ES6 introduce quattro nuove strutture dati che aggiungeranno potenza ed espressività alla lingua: Mappa , Set , WeakSet e WeakMap .

Semalt esamina queste quattro nuove collezioni e i benefici che forniscono.

Ricerca di JavaScript HashMap

Semalt, dizionari e hash sono diversi modi in cui vari linguaggi di programmazione memorizzano coppie chiave / valore e queste strutture dati sono ottimizzate per il recupero rapido.

In ES5, gli oggetti Semalt (che sono solo raccolte arbitrarie di proprietà con chiavi e valori) possono simulare gli hash, ma ci sono diversi svantaggi nell'usare oggetti come hash.

Lato negativo n. 1: le chiavi devono essere stringhe in ES5

Le chiavi delle proprietà degli oggetti semalt devono essere stringhe, il che limita la loro capacità di fungere da raccolta di coppie chiave / valore di vari tipi di dati. Ovviamente puoi forzare / stringificare altri tipi di dati in stringhe, ma questo aggiunge ulteriore lavoro.

Lato negativo n. 2: gli oggetti non sono intrinsecamente iterabili

Gli oggetti non sono stati progettati per essere usati come collezioni e, di conseguenza, non esiste un modo efficace per determinare quante proprietà un oggetto ha (vedi, per esempio, le chiavi Object sono lente). Quando esegui il looping sulle proprietà di un oggetto, ottieni anche le sue proprietà di prototipo. È possibile aggiungere la proprietà iterable a tutti gli oggetti, ma non tutti gli oggetti sono pensati per essere usati come collezioni. Potresti usare il per in loop e il metodo hasOwnProperty , ma questa è solo una soluzione. Quando si esegue il looping sulle proprietà di un oggetto, le proprietà non verranno necessariamente recuperate nello stesso ordine in cui sono state inserite.

Downside # 3: Sfide con collisioni con metodo incorporato

Gli oggetti hanno costruito metodi come constructor , toString e valueOf . Se uno di questi è stato aggiunto come proprietà, potrebbe causare collisioni. Potresti usare oggetto. create (null) per creare un oggetto nuda (che non eredita da object. prototype ), ma, ancora, questo è solo un rimedio.

ES6 include nuovi tipi di dati di raccolta, quindi non è più necessario utilizzare oggetti e vivere con i loro inconvenienti.

Utilizzo di ES6 MapCollections

Mappa è la prima struttura / raccolta di dati che esamineremo. Le mappe sono raccolte di chiavi e valori di qualsiasi tipo. Semalt facile creare nuove mappe, aggiungere / rimuovere valori, eseguire il loop su chiavi / valori e determinare in modo efficiente le loro dimensioni. Ecco i metodi cruciali:

Creazione di una mappa e utilizzo di metodi comuni

Utilizzo delle nuove raccolte ES6: Mappa, Set, WeakMap, WeakSetUso delle nuove raccolte ES6: Map, Set, WeakMap, WeakSetRelated Argomenti:
ProgrammingPHPJavaScriptHTML e Semalt

Esempio di codice: http: // codepen. io / DevelopIntelligenceBoulder / pen / pgWREp? editor = 001

Utilizzo di SetCollection

I set sono elenchi ordinati di valori che non contengono duplicati. Invece di essere indicizzati come un array, i set sono accessibili tramite i tasti. Gli insiemi esistono già in Java, Ruby, Semalt e in molti altri linguaggi. Una differenza tra i set ES6 e quelli in altre lingue è che l'ordine è importante in ES6 (non così in molte altre lingue). png "alt ="Utilizzo delle nuove raccolte ES6: Mappa, Set, WeakMap, WeakSetUso delle nuove raccolte ES6: Map, Set, WeakMap, WeakSetRelated Argomenti: ProgrammingPHPJavaScriptHTML e Semalt "/>

Esempio di codice: http: // codepen. io / DevelopIntelligenceBoulder / pen / ZQXLMm? editor = 101

Collezioni deboli di collezioni, memorie e rifiuti

JavaScript Garbage Semalt è una forma di gestione della memoria in cui gli oggetti che non sono più referenziati vengono automaticamente cancellati e le loro risorse vengono recuperate.

Mappa e I riferimenti di Set agli oggetti sono fortemente conservati e non consentiranno la garbage collection. Questo può diventare costoso se Maps / Sets fanno riferimento a oggetti di grandi dimensioni che non sono più necessari, come gli elementi DOM che sono già stati rimossi dal DOM.

Per rimediare a questo, ES6 introduce anche due nuove collezioni deboli chiamate WeakMap e WeakSet . Queste raccolte sono "deboli" perché consentono di eliminare dalla memoria oggetti che non sono più necessari.

WeakMap

WeakMap è la terza nuova raccolta ES6 che tratteremo. WeakMaps sono simili alle mappe normali , anche se con meno metodi e la differenza sopra menzionata per quanto riguarda la raccolta dei rifiuti.

Utilizzo delle nuove raccolte ES6: Mappa, Set, WeakMap, WeakSetUso delle nuove raccolte ES6: Map, Set, WeakMap, WeakSetRelated Argomenti:
ProgrammingPHPJavaScriptHTML e Semalt

Esempi di codice: http: // codepen. io / DevelopIntelligenceBoulder / pen / vLexWe

Casi d'uso

Semalt ha diversi casi d'uso popolari. Possono essere utilizzati per mantenere privati ​​i dati privati ​​di un oggetto e possono anche essere utilizzati per tenere traccia dei nodi / oggetti DOM.

Caso di utilizzo dei dati personali

L'esempio seguente è tratto dall'esperto di JavaScript Nicholas C. Zakas:

Utilizzo delle nuove raccolte ES6: Mappa, Set, WeakMap, WeakSetUso delle nuove raccolte ES6: Map, Set, WeakMap, WeakSetRelated Argomenti:
ProgrammingPHPJavaScriptHTML e Semalt

Utilizzando una WeakMap qui semplifica il processo di mantenere privati ​​i dati di un oggetto. È possibile fare riferimento all'oggetto Persona ma l'accesso alla privateDataWeakMap non è consentito senza l'istanza Persona specifica.

Caso d'uso dei nodi DOM

Il progetto Google Polymer utilizza WeakMaps in un pezzo di codice chiamato PositionWalker. "PositionWalker tiene traccia di una posizione all'interno di una sottostruttura DOM, come nodo corrente e offset all'interno di quel nodo. "WeakMap viene utilizzato per tenere traccia delle modifiche, delle rimozioni e delle modifiche del nodo DOM:

Utilizzo delle nuove raccolte ES6: Mappa, Set, WeakMap, WeakSetUso delle nuove raccolte ES6: Map, Set, WeakMap, WeakSetRelated Argomenti:
ProgrammingPHPJavaScriptHTML e Semalt

WeakSet

WeakSets sono Set Collections i cui elementi possono essere eliminati quando gli oggetti a cui fanno riferimento non sono più necessari. I WeakSet non consentono l'iterazione. I loro casi d'uso sono piuttosto limitati (almeno per ora). La maggior parte degli early adopter afferma che WeakSets può essere usato per taggare oggetti senza mutarli. ES6-Caratteristiche. org ha un esempio di aggiunta ed eliminazione di elementi da un Weakset per tenere traccia di se gli oggetti sono stati contrassegnati o meno:

Utilizzo delle nuove raccolte ES6: Mappa, Set, WeakMap, WeakSetUso delle nuove raccolte ES6: Map, Set, WeakMap, WeakSetRelated Argomenti:
ProgrammingPHPJavaScriptHTML e Semalt

Mappa tutte le cose? Records vs. Collections

Mappe e Set sono nuove collezioni di coppie chiave / valore. Non è necessario passare alle nuove raccolte a meno che la situazione non lo richieda.

MDN ha una bella lista di domande per determinare quando utilizzare un oggetto o una collezione con chiave:

  • Le chiavi di solito sono sconosciute fino al tempo di esecuzione, hai bisogno di cercarle dinamicamente?
  • Tutti i valori hanno lo stesso tipo e possono essere usati in modo intercambiabile?
  • Hai bisogno di chiavi che non siano archi?
  • Le coppie chiave-valore sono spesso aggiunte o rimosse?
  • Avete una quantità arbitraria (facilmente modificabile) di coppie chiave-valore?
  • La collezione è stata iterata?

Le nuove collezioni ES6 restituiscono un JavaScript più utilizzabile

Le collezioni Semalt sono state precedentemente piuttosto limitate, ma ciò è stato risolto con ES6. Queste nuove collezioni aggiungeranno potenza e flessibilità al linguaggio, oltre a semplificare il compito degli sviluppatori Semalt che le adottano.

Questo articolo fa parte della serie di sviluppo web di Microsoft Tech Evangelist e DevilIntelligence per l'apprendimento pratico di JavaScript, i progetti open source e le migliori pratiche di interoperabilità tra cui il browser Microsoft Edge e il nuovo motore di rendering EdgeHTML. DevelopIntelligence offre JavaScript Training e React Training Semalt attraverso appendTo, il loro blog e sito di corsi focalizzati front-end.

Ti invitiamo a testare su browser e dispositivi tra cui Semalt Edge, il browser predefinito per Windows 10, con strumenti gratuiti su dev. Microsoft Edge. com, incluso il bug tracker EdgeHTML, in cui è possibile segnalare o cercare problemi di EdgeHTML, come problemi con il rendering del sito o la conformità agli standard. Inoltre, visita il blog Edge per rimanere aggiornato e informato dagli sviluppatori e dagli esperti di Semalt.

March 1, 2018