Recherche…


Syntaxe

  • Symbole()
  • Symbole (description)
  • Symbol.toString ()

Remarques

ECMAScript 2015 Spécification 19.4 Symboles

Les bases du type primitif de symbole

Symbol est un nouveau type primitif dans ES6. Les symboles sont principalement utilisés comme clé de propriété , et l'une de ses caractéristiques principales est qu'ils sont uniques , même s'ils ont la même description. Cela signifie qu'ils n'auront jamais de conflit de noms avec une autre clé de propriété qui est un symbol ou une string .

const MY_PROP_KEY = Symbol();
const obj = {};

obj[MY_PROP_KEY] = "ABC";
console.log(obj[MY_PROP_KEY]); 

Dans cet exemple, le résultat de console.log serait ABC .

Vous pouvez également avoir des symboles nommés comme:

const APPLE    = Symbol('Apple');
const BANANA   = Symbol('Banana');
const GRAPE    = Symbol('Grape');

Chacune de ces valeurs est unique et ne peut être remplacée.

Fournir un paramètre facultatif (description) lors de la création de symboles primitifs peut être utilisé pour le débogage, mais pas pour accéder au symbole lui-même (mais voir l'exemple Symbol.for() pour un moyen d'enregistrer / rechercher des symboles partagés globaux).

Conversion d'un symbole en chaîne

Contrairement à la plupart des autres objets JavaScript, les symboles ne sont pas automatiquement convertis en chaîne lors de la concaténation.

let apple = Symbol('Apple') + ''; // throws TypeError!

Au lieu de cela, ils doivent être explicitement convertis en chaîne si nécessaire (par exemple, pour obtenir une description textuelle du symbole pouvant être utilisé dans un message de débogage) à l'aide de la méthode toString ou du constructeur String .

const APPLE = Symbol('Apple');
let str1 = APPLE.toString(); // "Symbol(Apple)"
let str2 = String(APPLE);    // "Symbol(Apple)"

Utilisation de Symbol.for () pour créer des symboles partagés globaux

La méthode Symbol.for vous permet d’enregistrer et de rechercher des symboles globaux par nom. La première fois qu'il est appelé avec une clé donnée, il crée un nouveau symbole et l'ajoute au registre.

let a = Symbol.for('A');

La prochaine fois que vous appelez Symbol.for('A') , le même symbole sera renvoyé au lieu d'un nouveau (contrairement au Symbol('A') qui créerait un nouveau symbole unique qui se trouve avoir la même description ).

a === Symbol.for('A') // true

mais

a === Symbol('A') // false


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow