Je pense que la bonne réponse à la question de Cheeso est que la mise en œuvre a dépassé la documentation. Il ne nécessite plus une chaîne comme clé, mais plutôt autre chose, qui peut être une chaîne (c'est-à-dire entre guillemets) ou (probablement) tout ce qui peut être utilisé comme nom de variable, ce qui, je suppose, signifie commencer par une lettre, _ , ou $, et n'incluent que les lettres, les chiffres et les $ et _.
Je voulais simplifier le reste pour la prochaine personne qui visite cette question avec la même idée que moi. Voici la viande:
Les noms de variables ne sont pas interpolés en JSON lorsqu'ils sont utilisés comme clé d'objet (Merci Friedo!)
Breton, utilisant "identifiant" au lieu de "clé", a écrit que "si un identifiant se trouve être un mot réservé, il est interprété comme ce mot plutôt que comme un identifiant". Cela peut être vrai, mais je l'ai essayé sans aucun problème:
var a = {do:1,long:2,super:3,abstract:4,var:5,break:6,boolean:7};
a.break
=> 6
À propos des guillemets, Quentin a écrit "... mais ce n'est pas obligatoire, à moins que [la clé] contienne certains caractères (ou combinaisons de caractères qui en feraient un mot-clé)"
J'ai trouvé que la première partie (certains caractères) est vraie, en utilisant le signe @ (en fait, je pense que $ et _ sont les seuls caractères qui ne causent pas l'erreur):
var a = {a@b:1};
=> Erreur de syntaxe
var a = {"a@b":1};
a['a@b']
=> 1
mais la parenthèse sur les mots clés, comme je l'ai montré ci-dessus, n'est pas vraie.
Ce que je voulais fonctionne parce que le texte entre l'ouverture {et les deux-points, ou entre la virgule et les deux-points pour les propriétés suivantes est utilisé comme une chaîne sans guillemets pour créer une clé d'objet, ou, comme Friedo l'a dit, un nom de variable là-bas ne le fait pas ' t être interpolé:
var uid = getUID();
var token = getToken(); // Returns ABC123
var data = {uid:uid,token:token};
data.token
=> ABC123