ES6 - Symbole

Introduction au symbole

ES6 introduit un nouveau type primitif appelé Symbol. Ils sont utiles pour implémenter la métaprogrammation dans les programmes JavaScript.

Syntaxe

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

Un symbole est juste un morceau de mémoire dans lequel vous pouvez stocker des données. Chaque symbole pointera vers un emplacement mémoire différent. Les valeurs renvoyées par un constructeur Symbol () sont uniques et immuables.

Exemple

Comprenons cela à travers un exemple. Au départ, nous avons créé deux symboles sans description suivis de symboles avec la même description. Dans les deux cas, l'opérateur d'égalité retournera false lorsque les symboles sont comparés.

<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>

La sortie du code ci-dessus sera comme mentionné ci-dessous -

symbol
false
Symbol(hello)
Symbol(hello)
false
Sr.Non Propriété et description
1 Symbol.for (clé)

recherche les symboles existants dans un registre de symboles avec la clé donnée et la renvoie, si elle est trouvée. Sinon, un nouveau symbole est créé dans le registre de symboles global avec cette clé.

2 Symbol.keyFor (sym)

Récupère une clé de symbole partagée du registre de symboles global pour le symbole donné.

Symbole et classes

Un symbole peut être utilisé avec des classes pour définir les propriétés de la classe. L'avantage est que si la propriété est un symbole comme indiqué ci-dessous, la propriété n'est accessible en dehors du package que si le nom du symbole est connu. Ainsi, les données sont beaucoup encapsulées lorsque les symboles sont utilisés comme propriétés.

Exemple

<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>

La sortie du code ci-dessus sera comme indiqué ci-dessous -

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