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