{active:“yes”}和{“active”:“yes”}有什么区别?

时间:2010-10-22 16:15:56

标签: javascript json

我已经使用FireBug来测试这两种情况,结果看起来非常相似:

>>> var x = {"active": "yes"}
>>> x.active
"yes"
>>> var x = {active: "yes"}
>>> x.active
"yes"

但我很确定这两者之间存在一些差异,甚至可能与性能有关。底线 - 我想知道{active:“yes”}和{“active”:“yes”}之间是否存在差异。

5 个答案:

答案 0 :(得分:28)

两者都有效。但是,您可以使用某些关键字,例如delete,以避免将它们用引号括起来,这样它们就不会被ECMAScript解析器直接处理,而是明确指定为字符串。

此外,JSON spec要求密钥有引号:

  

一个字符串以
开头和结尾   引号

所以{key:'value'}不是有效的JSON,而是有效的JS,而{"key":"value"}是有效的JS和JSON。

关键字和无效/模糊键的示例:

>>> ({delete:1})
SyntaxError: Unexpected token delete
>>> ({'delete':1})
Object

另一个例子:

>>> ({first-name:'john'})
SyntaxError: Unexpected token -
>>> ({'first-name':'john'})
Object
>>> ({'first-name':'john'})['first-name']
"john"

答案 1 :(得分:11)

两者都是有效的JavaScript(虽然有些名称只能引用,但active不在其中)。

后者是无效的JSON(引号在JSON中是强制性的。)

答案 2 :(得分:3)

每个有效的JSON也是有效的JavaScript,但并非每个有效的JavaScript都是有效的JSON,因为JSON是JavaScript的正确子集:

  

JSON⊂JavaScript

JSON要求引用名称/值对的名称,而JavaScript则不引用(只要它们不是保留关键字)。

因此,您的第一个示例{"active": "yes"}既是有效的JSON又是有效的JavaScript,而第二个示例{active: "yes"}只是有效的JavaScript。

答案 3 :(得分:2)

在JavaScript中,{"active": "yes"}{'active': "yes"}{"active": 'yes'}{active: 'yes'}都是相同的 - 如果您使用的是保留关键字(正如meder指出的那样),那么必须引用密钥 - 否则,密钥不需要引用。

在JSON中,另一方面所有键必须引用"
{"active": "yes"}是有效的JSON {'active': "yes"}{"active": 'yes'}{active: 'yes'}不是。

答案 4 :(得分:0)

如果您将此用于JSON,则名称(active)必须用引号括起来。没有它它仍然可以在JavaScript中工作,但它在技术上是畸形的JSON 见:http://json.org/
请注意,object需要string作为名称(冒号前面的位)。