Aperçu
ES6 introduit un nouveau type de données primitif, Symbol, qui représente des valeurs uniques. Son cas d'utilisation le plus important est de définir des noms de propriétés uniques pour les objets.
En plus de Number, String, Boolean, Object, null et undefined, les types de données ES6 incluent également Symbol.
Utilisation de base
La fonction Symbol ne peut pas être utilisée avec la commande new, car Symbol est un type de données primitif, et non un objet. Elle peut accepter une chaîne comme paramètre pour fournir une description du Symbol nouvellement créé, qui est utilisée pour l'affichage dans la console ou lorsqu'elle est utilisée comme chaîne, afin de faciliter la distinction.
Scénarios d'utilisation
En tant que noms de propriétés
Utilisation
Comme chaque valeur Symbol est unique, utiliser Symbol comme nom de propriété d'un objet permet de garantir que les noms de propriétés n'entrent pas en conflit.
Lorsque Symbol est utilisé comme nom de propriété d’objet, l’opérateur point ne peut pas être utilisé ; il faut utiliser des crochets. Comme ce qui suit l’opérateur point est une chaîne, ce qui est accessible est la propriété sy de chaîne, et non la propriété sy de valeur Symbol.
Points à noter
Lorsqu'une valeur Symbol est utilisée comme nom de propriété, cette propriété est publique, non privée, et est accessible en dehors de la classe. Cependant, elle n'apparaîtra pas dans les boucles for...in ou for...of, et ne sera pas renvoyée par Object.keys() ou Object.getOwnPropertyNames(). Pour lire les propriétés Symbol d'un objet, vous pouvez les obtenir via Object.getOwnPropertySymbols() et Reflect.ownKeys().
Définition de constantes
Dans ES5, les chaînes de caractères sont utilisées pour représenter des constantes. Par exemple :
const COLOR_RED = "red"; const COLOR_YELLOW = "yellow"; const COLOR_BLUE = "blue";
Mais l'utilisation de chaînes de caractères ne permet pas de garantir que les constantes soient uniques, ce qui peut causer certains problèmes :
Mais utiliser Symbol pour définir des constantes peut garantir que les valeurs de ce groupe de constantes sont toutes différentes. Utilisez Symbol pour modifier l'exemple ci-dessus.
Les valeurs Symbol sont uniques, donc il n'y aura pas de constantes ayant la même valeur, ce qui garantit que l'instruction switch s'exécute comme le code le prévoit.
Symbol.for()
Symbol.for() est similaire au modèle singleton. D'abord, il recherche globalement parmi les Symbol enregistrés s'il existe une valeur Symbol ayant ce paramètre de chaîne comme nom. Si oui, il renvoie cette valeur Symbol ; sinon, il crée une nouvelle valeur Symbol avec le paramètre de chaîne comme nom, l'enregistre dans l'environnement global pour les recherches futures.
Symbol.keyFor()
Symbol.keyFor() renvoie la clé d'une valeur Symbol enregistrée, qui est utilisée pour vérifier si une valeur Symbol ayant ce paramètre de chaîne comme nom a été enregistrée.