我认为Cheeso问题的正确答案是实现超过了文档。它不再需要一个字符串作为关键字,而是需要其他东西,它可以是一个字符串(即引号)或(可能)任何可以用作变量名的东西,我猜测它意味着以字母开头,_或$,只包括字母,数字和$和_。
我想简化休息谁访问与我一样的想法这个问题,旁边的人。这里的肉:
变量名没有在JSON插值为对象键(!感谢Friedo)
布列塔尼,使用“标识”,而不是“关键”,写时说:“如果一个标识符恰好是一个保留字,它被解释为该字而不是标识符。“这可能是真的,但我想它没有任何麻烦:
var a = {do:1,long:2,super:3,abstract:4,var:5,break:6,boolean:7};
a.break
=> 6
关于使用引号,昆汀写道:” ......但你不就得了,除非[关键]包含某些字符(或字符的组合,这将使它关键字)”
我找到了前半部分(某些字符)为真,用@符号(其实我觉得$和_是只有不会导致错误的字符):
var a = {[email protected]:1};
=>语法错误
var a = {"[email protected]":1};
a['[email protected]']
=> 1
但括号关于关键字,如我上面显示,是不正确的。
我想要的作品是因为开头{和冒号之间的文本,或者逗号和冒号之间的文本被用作不带引号的字符串来创建对象键,或者像弗里多所说的那样,它是一个变量名字里有没有得到插值:
var uid = getUID();
var token = getToken(); // Returns ABC123
var data = {uid:uid,token:token};
data.token
=> ABC123
你是什么意思“的JSON”的意思是只允许?它使“JSON”看起来像一种编程语言。 – 2010-01-14 22:21:33
@布鲁诺:你可以用同样的方式谈论XML ......可悲的是,有些人可能会尝试使用XML作为编程语言...... – 2010-01-14 22:24:48
+1 ......它看起来像一个奇特的矛盾。 ..“带引号”使其成为标准的JSON,但不会与'eval()'(即javascript)一起使用。 – skaffman 2010-01-14 22:24:55