Ich denke, die richtige Antwort auf Cheesos Frage ist, dass die Implementierung die Dokumentation übertroffen hat. Es wird keine Zeichenfolge mehr als Schlüssel benötigt, sondern etwas anderes, das entweder eine Zeichenfolge (dh in Anführungszeichen) oder (wahrscheinlich) alles sein kann, was als Variablenname verwendet werden kann. Ich denke, dies bedeutet, dass Sie mit einem Buchstaben beginnen, _ , oder $, und enthalten nur Buchstaben, Zahlen sowie $ und _.
Ich wollte den Rest für die nächste Person vereinfachen, die diese Frage mit der gleichen Idee wie ich besucht. Hier ist das Fleisch:
Variablennamen werden in JSON nicht interpoliert, wenn sie als Objektschlüssel verwendet werden (Danke Friedo!)
Breton, der "Bezeichner" anstelle von "Schlüssel" verwendete, schrieb: "Wenn ein Bezeichner zufällig ein reserviertes Wort ist, wird er als dieses Wort und nicht als Bezeichner interpretiert." Das mag wahr sein, aber ich habe es ohne Probleme versucht:
var a = {do:1,long:2,super:3,abstract:4,var:5,break:6,boolean:7};
a.break
=> 6
Über die Verwendung von Anführungszeichen schrieb Quentin: "... aber das müssen Sie nicht, es sei denn, [der Schlüssel] enthält bestimmte Zeichen (oder Kombinationen von Zeichen, die es zu einem Schlüsselwort machen würden)."
Ich fand, dass der vorherige Teil (bestimmte Zeichen) mit dem @ -Zeichen wahr ist (tatsächlich denke ich, dass $ und _ die einzigen Zeichen sind, die den Fehler nicht verursachen):
var a = {a@b:1};
=> Syntaxfehler
var a = {"a@b":1};
a['a@b']
=> 1
Aber die Klammer über Schlüsselwörter, wie ich oben gezeigt habe, ist nicht wahr.
Was ich wollte, funktioniert, weil der Text zwischen der Öffnung {und dem Doppelpunkt oder zwischen dem Komma und dem Doppelpunkt für nachfolgende Eigenschaften als nicht zitierte Zeichenfolge verwendet wird, um einen Objektschlüssel zu erstellen, oder, wie Friedo es ausdrückte, als Variablenname dort nicht. ' t interpoliert werden:
var uid = getUID();
var token = getToken(); // Returns ABC123
var data = {uid:uid,token:token};
data.token
=> ABC123