ES6 - Simbolo

Introduzione al simbolo

ES6 introduce un nuovo tipo primitivo chiamato Symbol. Sono utili per implementare la metaprogrammazione nei programmi JavaScript.

Sintassi

const mySymbol = Symbol()
const mySymbol = Symbol(stringDescription)

Un simbolo è solo un pezzo di memoria in cui è possibile memorizzare alcuni dati. Ciascun simbolo punterà a una posizione di memoria diversa. I valori restituiti da un costruttore Symbol () sono univoci e immutabili.

Esempio

Cerchiamo di capirlo attraverso un esempio. Inizialmente, abbiamo creato due simboli senza descrizione seguiti da simboli con la stessa descrizione. In entrambi i casi, l'operatore di uguaglianza restituirà false quando i simboli vengono confrontati.

<script>
   const s1 = Symbol();
   const s2 = Symbol();
   console.log(typeof s1)
   console.log(s1===s2)
   const s3 = Symbol("hello");//description
   const s4 = Symbol("hello");
   console.log(s3)
   console.log(s4)
   console.log(s3==s4)
</script>

L'output del codice sopra sarà come indicato di seguito -

symbol
false
Symbol(hello)
Symbol(hello)
false
Suor n Proprietà e descrizione
1 Simbolo per (chiave)

cerca i simboli esistenti in un registro dei simboli con la chiave data e lo restituisce, se trovato. Altrimenti, un nuovo simbolo viene creato nel registro dei simboli globale con questa chiave.

2 Symbol.keyFor (sym)

Recupera una chiave del simbolo condivisa dal registro dei simboli globale per il simbolo specificato.

Simbolo e classi

Un simbolo può essere utilizzato con le classi per definire le proprietà nella classe. Il vantaggio è che se la proprietà è un simbolo come mostrato di seguito, è possibile accedere alla proprietà all'esterno del pacchetto solo se il nome del simbolo è noto. Quindi, i dati sono molto incapsulati quando i simboli vengono usati come proprietà.

Esempio

<script>
   const COLOR = Symbol()
   const MODEL = Symbol()
   const MAKE = Symbol()
   class Bike {
      constructor(color ,make,model){
      this[COLOR] = color;
      this[MAKE] = make;
      this[MODEL] = model;
   }
}
let bike = new Bike('red','honda','cbr')
console.log(bike)
//property can be accessed ony if symbol name is known
console.log(bike[COLOR])
</script>

L'output del codice precedente sarà come indicato di seguito:

Bike {Symbol(): "red", Symbol(): "honda", Symbol(): "cbr"}
red