Я думаю, что правильный ответ на вопрос Cheeso заключается в том, что реализация превзошла документацию. Ему больше не требуется строка в качестве ключа, а скорее что-то еще, которое может быть либо строкой (то есть заключенной в кавычки), либо (возможно) чем-либо, что можно использовать в качестве имени переменной, что, как я предполагаю, означает начало с буквы _ , или $, и включать только буквы, цифры, а также $ и _.
Я хотел упростить остальное для следующего человека, который задаст этот вопрос с той же идеей, что и я. Вот мясо:
Имена переменных не интерполируются в 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
но скобки в отношении ключевых слов, как я показал выше, неверны.
То, что я хотел, работает, потому что текст между открытием {и двоеточием или между запятой и двоеточием для последующих свойств используется как строка без кавычек для создания ключа объекта или, как выразился Фридо, имя переменной там не ' t интерполируются:
var uid = getUID();
var token = getToken();
var data = {uid:uid,token:token};
data.token
=> ABC123