Creo que la respuesta correcta a la pregunta de Cheeso es que la implementación superó la documentación. Ya no requiere una cadena como clave, sino algo más, que puede ser una cadena (es decir, entre comillas) o (probablemente) cualquier cosa que se pueda usar como nombre de variable, lo que supongo que significa comenzar con una letra, _ , o $, e incluya solo letras, números y $ y _.
Quería simplificar el resto para la próxima persona que visite esta pregunta con la misma idea que yo. Aquí está la carne:
Los nombres de las variables no se interpolan en JSON cuando se usan como clave de objeto (¡Gracias Friedo!)
Breton, utilizando "identificador" en lugar de "clave", escribió que "si un identificador es una palabra reservada, se interpreta como esa palabra en lugar de como un identificador". Esto puede ser cierto, pero lo intenté sin ningún problema:
var a = {do:1,long:2,super:3,abstract:4,var:5,break:6,boolean:7};
a.break
=> 6
Sobre el uso de comillas, Quentin escribió "... pero no es necesario, a menos que [la clave] contenga ciertos caracteres (o combinaciones de caracteres que la convertirían en una palabra clave)".
Encontré que la parte anterior (ciertos caracteres) es verdadera, usando el signo @ (de hecho, creo que $ y _ son los únicos caracteres que no causan el error):
var a = {a@b:1};
=> Error de sintaxis
var a = {"a@b":1};
a['a@b']
=> 1
pero el paréntesis sobre las palabras clave, como mostré anteriormente, no es cierto.
Lo que quería funciona porque el texto entre la apertura {y los dos puntos, o entre la coma y los dos puntos para las propiedades posteriores se usa como una cadena sin comillas para hacer una clave de objeto, o, como dijo Friedo, un nombre de variable no lo hace ' t se interpola:
var uid = getUID();
var token = getToken(); // Returns ABC123
var data = {uid:uid,token:token};
data.token
=> ABC123