Quel est le type de "clés" en JavaScript?

J'ai biffé dans un de ces moments où je perds tout simplement l'accent et commence à me poser une question stupide:

var a = { b: "value" } 

Quel est le type de 'b' et je ne veux pas dire le type de "valeur", mais la clé réelle marquée comme b?

Arrière-plan: j'ai commencé à me poser des questions à ce sujet lorsque je devais créer une clé qui est une chaîne:

 var a = { "b": "value" } 

Parce que, plus tard, il est référencé comme suit:

 a["b"] 

Et puis s'est étonné en se demandant la question originale.

En termes littéral d'objet, b est une propriété. Les propriétés sont des chaînes dans JavaScript, bien que lorsque vous définissez le nom de la propriété dans un littéral d'objet, vous pouvez omettre les délimiteurs de chaîne.

Lorsque vous faites une boucle dans les noms de propriété en utilisant un for...in , le nom de la propriété est une chaîne:

 for (key in a) { alert(typeof key); //-> "string" } 

Les noms de propriété sont contraints automatiquement à une chaîne. Vous pouvez l'essayer vous-même en utilisant un littéral numérique comme nom de propriété.

 var object = { .12e3: 'wut' }; object[.12e3]; // 'wut' object['.12e3']; // undefined object['120']; // 'wut' // Let's try another numeric literal: object = { 12e34: 'heh' }; object[12e34]; // 'heh' object['12e34']; // undefined object[1.2e35]; // 'heh' object['1.2e35']; // undefined object[1.2e+35]; // 'heh' object['1.2e+35']; // 'heh' 

Pour cette raison, je recommanderais d'utiliser uniquement des littératures de chaîne pour les noms de propriétés.

À partir de noms de propriétés non inscrits / clés d'objet en JavaScript , mon écriture sur le sujet:

Les citations ne peuvent être omises que si le nom de la propriété est un littéral numérique ou un nom d'identifiant valide .

[…]

La notation de support peut être utilisée en toute sécurité pour tous les noms de propriétés.

[…]

La notation de point ne peut être utilisée que lorsque le nom de la propriété est un nom d'identifiant valide.

J'ai également créé un outil qui vous indiquera si un nom de propriété donné peut être utilisé sans guillemets et / ou avec une notation par points. Essayez-le à mothereff.in/js-properties .

Capture d'écran

B est une chaîne, c'est juste une syntaxe abrégée, donc vous écrivez

 var a = { b: "value" } 

au lieu de

 var a = { "b": "value" } 

Gardez à l'esprit que les objets JavaScript sont des tables de hash et les clés ne sont que des chaînes. Vous pouvez omettre les citations autour des noms de propriétés lors de la déclaration, mais si vous utilisez des mots réservés pour les noms de propriétés ou tout autre nom qui se trouve être un identifiant invalide, par exemple en commençant par un chiffre ou contenant des espaces, vous devriez envelopper la propriété Noms entre guillemets:

 var a = { "1b": "value", "b and c": "value", "+12345": "value" }; 

Notez également que vous pouvez faire référence aux propriétés des objets à l'aide de la notation par points ou de la notation de l'indice, quelles que soient les citations utilisées lorsqu'elles ont été déclarées. Toutefois, si vous utilisez des noms de propriétés qui seraient des identifiants non valides, comme ceux de l'exemple ci-dessus, vous êtes obligé d'utiliser la notation de sous-titre:

 a.1b // invalid (dot notation) a["b and c"]; // valid (subscript notation) 
 var a = {$ : 'hello', 2123 : 'number'}; for(var key in a) { console.log(typeof key) }