根据克罗克福德的说法json.org, 一个 JSONobject由。。。制成由。。。做成members,它由pairs.
每对都是由一个string and a value,有一个string被定义为:
字符串是零个或多个的序列
Unicode 字符,用双引号包裹
引号,使用反斜杠转义。 A
字符被表示为单个
字符串。一串很
很像 C 或 Java 字符串。
但实际上,大多数程序员甚至不知道 JSON 键应该用双引号引起来,因为大多数浏览器不需要使用双引号。
将 JSON 用双引号引起来有什么意义吗?
有效示例:
{
"keyName" : 34
}
与无效相反:
{
keyName : 34
}
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 第五版标准修复了这个问题,现在在 ES5 实现中,即使是保留字也可以在对象文字和成员访问中使用而不带引号(obj.function
在 ES5 中可以)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)