Aller au contenu

Type Symbol JavaScript

Introduction aux Symboles JavaScript

Les Symboles, introduits dans ECMAScript 2015 (ES6), sont un type de données unique et immuable, principalement utilisé pour ajouter des clés de propriété uniques aux objets. Ce guide explore les Symboles, leurs applications pratiques et la manière dont ils améliorent le développement JavaScript grâce à des identifiants uniques et à des capacités de méta-programmation.

Comprendre les Symboles

Un Symbol est une valeur primitive unique et immuable qui peut être utilisée comme clé d’une propriété d’objet. Chaque valeur Symbol renvoyée par Symbol() est distincte de toutes les autres, ce qui garantit son unicité.

Exemple : Créer et utiliser des Symboles


Output appears here after Run.

sym1 est créé sans description, tandis que sym2 et sym3 sont créés avec la même description. Malgré cette description identique, sym2 et sym3 sont des Symboles uniques.

Veuillez noter que, dans cet exemple, la fonction String() est utilisée pour convertir les Symboles en chaîne de caractères afin de les afficher en toute sécurité dans les journaux.

Les Symboles comme clés de propriété

L’utilisation des Symboles comme clés de propriété vous permet d’ajouter des propriétés cachées aux méthodes d’énumération standard comme Object.keys() et for...in. Par défaut, les propriétés symboliques sont énumérables, mais elles sont exclues de ces boucles standard. Vous pouvez modifier leur énumérabilité à l’aide de Object.defineProperty(). De plus, JSON.stringify() ignore les propriétés dont la clé est un Symbol, ce qui aide à empêcher la sérialisation de données sensibles. Pour récupérer les propriétés dont la clé est un Symbol, vous pouvez utiliser Object.getOwnPropertySymbols() ou Reflect.ownKeys().

Exemple : Utiliser des Symboles dans des objets


Output appears here after Run.

L’objet user utilise un Symbol id comme clé d’une propriété cachée, accessible uniquement via le Symbol id. Cette propriété n’apparaît pas dans les listes standard de propriétés d’objet.

Partager des Symboles avec Symbol.for et Symbol.keyFor

Les Symboles créés avec Symbol.for sont stockés dans le registre global des Symboles et peuvent être accessibles partout dans votre code, ce qui garantit des références cohérentes grâce aux méthodes Symbol.for et Symbol.keyFor.

Exemple : Partager des Symboles


Output appears here after Run.

globalSym et sameGlobalSym font référence exactement au même Symbol, stocké globalement. Symbol.keyFor récupère la clé associée à un Symbol global.

Utilisation dans le monde réel

Voici quelques exemples pratiques de la manière dont les Symboles peuvent être utilisés dans des situations réelles :

1. Gérer l’accès aux propriétés d’objet

Les Symboles sont particulièrement utiles lorsque vous souhaitez contrôler l’accès à certaines propriétés d’un objet, en vous assurant qu’elles ne sont pas modifiées accidentellement ou accessibles via les méthodes courantes d’accès aux propriétés d’objet.

Exemple : Membres privés dans les classes

Lors de la création de classes en JavaScript, vous pouvez vouloir disposer de propriétés privées qui ne doivent pas être accessibles directement en dehors des méthodes de la classe. L’utilisation des Symboles peut offrir un moyen d’obtenir une forme de confidentialité.


Output appears here after Run.

2. Éviter les collisions de propriétés

Lorsque vous travaillez avec des mixins ou que vous étendez des objets dont vous ne contrôlez pas tous les noms de propriétés, les Symboles peuvent aider à éviter les collisions de noms de propriétés.

Exemple : Mixins sûrs

Si vous étendez un objet avec des fonctionnalités supplémentaires provenant de plusieurs sources, les Symboles peuvent garantir qu’il n’y a pas de collision de clés susceptible d’écraser des propriétés existantes.


Output appears here after Run.

3. Méta-programmation

Les Symboles font partie intégrante des capacités de méta-programmation de JavaScript. Certains Symboles bien connus sont utilisés pour modifier ou personnaliser le comportement des instances d’objet. Au-delà de Symbol.iterator, d’autres comme Symbol.toStringTag (personnalise la sortie de Object.prototype.toString) et Symbol.hasInstance (personnalise le comportement de instanceof) offrent une intégration profonde au langage.

Exemple : Itérateurs personnalisés

Vous pouvez utiliser des Symboles pour définir un comportement d’itération personnalisé sur des objets à l’aide de la propriété Symbol.iterator.


Output appears here after Run.

4. Les Symboles pour le débogage

Les Symboles peuvent également être utiles à des fins de débogage, car vous pouvez attacher des méta-informations aux objets sans affecter leur comportement opérationnel.

Exemple : Ajouter des informations de débogage


Output appears here after Run.

Ces exemples illustrent comment les Symboles peuvent être exploités dans des scénarios pratiques pour gérer les propriétés d’objet de manière plus sûre, étendre les fonctionnalités sans interférence et faciliter des techniques de programmation avancées en JavaScript.

Conclusion

Les Symboles en JavaScript offrent un moyen robuste de gérer des identifiants uniques et permettent aux développeurs de gérer les propriétés d’objet avec un haut degré de contrôle et de confidentialité. En utilisant les Symboles, vous pouvez vous assurer que les propriétés sont manipulées de manière appropriée, en évitant les effets secondaires involontaires.

Practice

What are some characteristics of JavaScript Symbol type?

Trouvez-vous cela utile?

Aperçu dual-run — comparez avec les routes Symfony en production.