Penso che la risposta giusta alla domanda di Cheeso sia che l'implementazione ha superato la documentazione. Non richiede più una stringa come chiave, ma piuttosto qualcos'altro, che può essere una stringa (cioè quotata) o (probabilmente) qualsiasi cosa possa essere usata come nome di variabile, che immagino significhi iniziare con una lettera, _ o $ e includi solo lettere, numeri e $ e _.
Volevo semplificare il resto per la prossima persona che visita questa domanda con la stessa idea che ho fatto io. Ecco la carne:
I nomi delle variabili non vengono interpolati in JSON se usati come chiave oggetto (Grazie Friedo!)
Breton, usando "identificatore" invece di "chiave", scrisse che "se un identificatore è una parola riservata, viene interpretato come quella parola piuttosto che come un identificatore". Potrebbe essere vero, ma l'ho provato senza problemi:
var a = {do:1,long:2,super:3,abstract:4,var:5,break:6,boolean:7};
a.break
=> 6
Sull'uso delle virgolette, Quentin ha scritto "... ma non è necessario, a meno che [la chiave] non contenga determinati caratteri (o combinazioni di caratteri che la renderebbero una parola chiave)"
Ho scoperto che la prima parte (alcuni caratteri) è vera, usando il segno @ (infatti, penso che $ e _ siano gli unici caratteri che non causano l'errore):
var a = {a@b:1};
=> Errore di sintassi
var a = {"a@b":1};
a['a@b']
=> 1
ma la parentesi sulle parole chiave, come ho mostrato sopra, non è vera.
Quello che volevo funziona perché il testo tra l'apertura {e i due punti, o tra la virgola e i due punti per le proprietà successive è usato come una stringa non quotata per rendere la chiave di un oggetto, o, come ha detto Friedo, un nome di variabile lì non ' t ottenere interpolato:
var uid = getUID();
var token = getToken(); // Returns ABC123
var data = {uid:uid,token:token};
data.token
=> ABC123