Constructeur Symbol()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2015.
Le constructeur Symbol()
renvoie une valeur de type symbol
. Ce n'est pas à proprement parler un constructeur, car il n'accepte pas la syntaxe new Symbol()
et qu'il n'est pas prévu pour créer des sous-classes. On pourra l'utiliser comme valeur pour la clause extends
d'une définition de classe, mais on ne pourra pas l'utiliser avec un appel super
, cela entraînera une exception.
Exemple interactif
Syntaxe
Symbol();
Symbol(description);
Paramètres
description
Facultatif-
Une chaîne de caractères qui décrit le symbole. Elle peut être utilisée pour le débogage mais ne permet pas d'accéder au symbole lui-même.
Exemples
Créer des symboles
Pour créer un nouveau symbole primitif, on écrit Symbol()
en fournissant éventuellement une chaîne de caractères comme description :
let sym1 = Symbol();
let sym2 = Symbol("toto");
let sym3 = Symbol("toto");
Dans le code précédent, on crée trois nouveaux symboles. On notera que Symbol("toto")
ne convertit pas la chaîne de caractères "toto"
en un symbole. C'est bien un nouveau symbole qui est créé chaque fois :
Symbol("toto") === Symbol("toto"); // false
new Symbol(…)
La syntaxe qui suit, utilisant l'opérateur new
, déclenchera une exception TypeError
:
let sym = new Symbol(); // TypeError
Cela permet d'éviter aux développeuses et développeurs de créer un objet enveloppant une valeur symbole primitive plutôt qu'un nouveau symbole. Ce comportement se distingue des autres types de données primitifs pour lesquels c'est possible (par exemple new Boolean()
, new String()
et new Number()
).
Si on souhaite vraiment envelopper un symbole dans une valeur objet, il faudra utiliser la fonction Object()
:
let sym = Symbol("toto");
let symObj = Object(sym);
typeof sym; // => "symbol"
typeof symObj; // => "object"
Spécifications
Specification |
---|
ECMAScript Language Specification # sec-symbol-constructor |
Compatibilité des navigateurs
BCD tables only load in the browser