为何将JSON键放在引号中的真正原因取决于ECMAScript 3标识符的语义。
不带引号的保留字不能用作对象文字中的属性名称,例如:
({function: 0})
({if: 0})
({true: 0})
如果使用引号,则属性名称有效:
({"function": 0})
({"if": 0})
({"true": 0})
自己的Crockford在本次演讲中对此进行了解释,他们希望保持JSON标准的简单性,并且不希望对其具有所有这些语义限制:
....
那就是我们发现未引用名称的问题。事实证明,ECMA Script 3具有一些保留字策略。保留字必须在关键位置加引号,这确实很麻烦。当我开始将其制定为标准时,我不想将所有保留字都放入标准中,因为它看起来确实很愚蠢。
当时,我试图说服人们:是的,您可以使用JavaScript编写应用程序,它实际上可以正常工作,并且是一种很好的语言。那么,我不想同时说:看看他们所做的这件事真是愚蠢!因此,我决定让我们只引用这些键。
那样,我们不必告诉任何人它是多么的糟糕。
这就是为什么到目前为止,键都用JSON引用。
...
现在,ECMAScript 5th Edition Standard在ES5实现中解决了此问题,即使对象字面量和成员访问权限中,甚至保留字也可以不带引号使用(obj.function
ES5中为OK)。
仅作记录,该标准已由软件供应商实施,您可以在此兼容性表上查看哪些浏览器包含此功能(请参阅保留字作为属性名)。