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