Je pense que la bonne réponse à Cheeso de la question est que la mise en œuvre a dépassé la documentation. Il ne nécessite plus une chaîne de caractères comme la clé, mais plutôt quelque chose d'autre, qui peut être soit une chaîne de caractères (c'est à dire cité) ou (probablement) rien de ce qui peut être utilisé comme un nom de variable, qui je suppose signifie commencer par une lettre, _, ou $, et ne comprennent que des lettres, des chiffres, et le $ et _.
J'ai voulu simplifier le reste pour la prochaine personne qui visite cette question avec la même idée que j'ai fait. Voici la viande:
Les noms de variables ne sont pas interpolés en JSON lorsqu'il est utilisé comme un objet clé (Merci Friedo!)
Breton, à l'aide de "identificateur" au lieu de "la clé", a écrit que "si un identifiant est un mot réservé, il est interprété comme le 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 de l'utilisation des citations, Quentin a écrit: "...mais vous n'avez pas à, à moins que [le] contient certains caractères (ou des combinaisons de caractères qui en font un mot-clé)"
J'ai trouvé l'ancienne partie (certains caractères) est vrai, en utilisant le signe @ (en fait, je pense que $ " et " _ " sont les seuls caractères qui ne sont pas la cause de 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 vrai.
Ce que je voulais fonctionne parce que le texte entre l'ouverture { et le côlon, ou entre la virgule et les deux points pour les propriétés suivantes est utilisée comme non cotées chaîne pour en faire un objet clé, ou, comme Friedo, un nom de variable, il n'a pas obtenir de l'interpolation:
var uid = getUID();
var token = getToken(); // Returns ABC123
var data = {uid:uid,token:token};
data.token
=> ABC123