我已经使用FireBug来测试这两种情况,结果看起来非常相似:
>>> var x = {"active": "yes"}
>>> x.active
"yes"
>>> var x = {active: "yes"}
>>> x.active
"yes"
但我很确定这两者之间存在一些差异,甚至可能与性能有关。底线 - 我想知道{active:“yes”}和{“active”:“yes”}之间是否存在差异。
答案 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
作为名称(冒号前面的位)。