JavaScript Identifiants & Identifiant


Exemple

En ce qui concerne les mots réservés, il existe une petite distinction entre les "identificateurs" utilisés pour les noms de variables ou de noms de fonctions et les "noms d'identifiants" autorisés comme propriétés des types de données composites.

Par exemple, ce qui suit entraînera une erreur de syntaxe illégale:

var break = true;

SyntaxError Uncaught: rupture de jeton inattendue

Cependant, le nom est considéré comme une propriété d'un objet (à partir de ECMAScript 5+):

var obj = {
    break: true
};
console.log(obj.break);

Pour citer cette réponse :

À partir de la spécification du langage ECMAScript® 5.1 :

Section 7.6

Identifier Les noms sont des jetons interprétés selon la grammaire donnée dans la section «Identifiers» du chapitre 5 du standard Unicode, avec quelques petites modifications. Un Identifier est un IdentifierName non ReservedWord (voir 7.6.1 ).

Syntaxe

Identifier ::
  IdentifierName but not ReservedWord

Par spécification, un ReservedWord est:

Section 7.6.1

Un mot réservé est un IdentifierName qui ne peut pas être utilisé comme Identifier .

ReservedWord :: 
  Keyword
  FutureReservedWord
  NullLiteral
  BooleanLiteral

Cela inclut les mots-clés, les mots-clés futurs, null littéraux null et booléens. La liste complète des mots-clés se trouve dans la section 7.6.1 et les littéraux dans la section 7.8 .

Ce qui précède (Section 7.6) implique que IdentifierName s peut être ReservedWord s, et à partir de la spécification pour les initialiseurs d’objets :

Section 11.1.5

Syntaxe

ObjectLiteral :
  { }
  { PropertyNameAndValueList }
  { PropertyNameAndValueList , }

PropertyName est, par spécification:

PropertyName :
  IdentifierName
  StringLiteral
  NumericLiteral

Comme vous pouvez le voir, un PropertyName peut être un IdentifierName , ce qui permet à ReservedWord s d’être PropertyName s. Cela nous indique de manière concluante que, par spécification , il est permis d’avoir des commandes ReservedWord telles que class et var tant que PropertyName non équivaut, tout comme les littéraux de chaîne ou les littéraux numériques.

Pour en savoir plus, reportez-vous à la Section 7.6 - Noms et identificateurs des identificateurs.


Remarque: le surligneur de syntaxe dans cet exemple a repéré le mot réservé et l’a toujours mis en évidence. Bien que l'exemple soit valide, les développeurs Javascript peuvent être pris par des outils de compilateur / transpiler, linter et minifier qui affirment le contraire.