Я думаю, что правильный ответ на вопрос Чизо состоит в том, что реализация превзошла документацию. Для него больше не требуется строка в качестве ключа, а скорее что-то еще, что может быть либо строкой (т. Е. Заключенной в кавычки), либо (возможно) всем, что может быть использовано в качестве имени переменной, что, как я предполагаю, означает начинаться с буквы, _ или $ и включают только буквы, цифры, а также $ и _.
Я хотел упростить остальное для следующего человека, который посещает этот вопрос с той же идеей, что и я. Вот мясо:
Имена переменных не интерполируются в JSON при использовании в качестве ключа объекта (Спасибо, Фридо!)
Бретон, используя «идентификатор» вместо «ключ», писал, что «если идентификатор оказывается зарезервированным словом, он интерпретируется как это слово, а не как идентификатор». Это может быть правдой, но я попробовал без проблем:
var a = {do:1,long:2,super:3,abstract:4,var:5,break:6,boolean:7};
a.break
=> 6
Об использовании кавычек Квентин писал: "... но вам не нужно, если [ключ] не содержит определенных символов (или комбинаций символов, которые делают его ключевым словом)"
Я обнаружил, что предыдущая часть (определенные символы) верна, используя знак @ (на самом деле, я думаю, что $ и _ являются единственными символами, которые не вызывают ошибку):
var a = {a@b:1};
=> Синтаксическая ошибка
var a = {"a@b":1};
a['a@b']
=> 1
но скобки в отношении ключевых слов, как я показал выше, не соответствуют действительности.
То, что я хотел, работает, потому что текст между открывающим {и двоеточием, или между запятой и двоеточием для последующих свойств используется в качестве строки без кавычек для создания ключа объекта или, как выразился Фридо, имени переменной не интерполируется:
var uid = getUID();
var token = getToken(); // Returns ABC123
var data = {uid:uid,token:token};
data.token
=> ABC123