我认为,对Cheeso问题的正确答案是实施超过了文档。它不再需要字符串作为键,而是其他东西,它可以是字符串(即用引号引起来),也可以是(可以)任何可用作变量名的东西,我猜这意味着以字母_开头或$,并且仅包含字母,数字以及$和_。
我想为下一个以与我相同的想法访问此问题的人简化其余部分。这是肉:
变量名称用作对象键时,不会在JSON中内插(感谢Friedo!)
Breton使用“ identifier”而不是“ key”写道:“如果标识符碰巧是保留字,则将其解释为该字而不是标识符。” 这可能是正确的,但是我尝试了一下却没有任何麻烦:
var a = {do:1,long:2,super:3,abstract:4,var:5,break:6,boolean:7};
a.break
=> 6
关于使用引号,Quentin写道:“ ...但您不必这样做,除非[key]包含某些字符(或使它们成为关键字的字符组合)”
我发现前一部分(某些字符)是正确的,使用@符号(实际上,我认为$和_是不会导致错误的唯一字符):
var a = {a@b:1};
=>语法错误
var a = {"a@b":1};
a['a@b']
=> 1
但是如上所示,括号内的关键词是不正确的。
我想要的东西是有效的,因为开头{和冒号之间,或逗号和冒号之间的后续属性之间的文本用作未加引号的字符串来构成对象键,或者如Friedo所说,那里的变量名没有t插值:
var uid = getUID();
var token = getToken(); // Returns ABC123
var data = {uid:uid,token:token};
data.token
=> ABC123