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

Era*_*lel 10 javascript json

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

>>> var x = {"active": "yes"}
>>> x.active
"yes"
>>> var x = {active: "yes"}
>>> x.active
"yes"
Run Code Online (Sandbox Code Playgroud)

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

med*_*iev 28

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

此外,JSON规范要求密钥在它们周围有引号:

字符串以
引号开头和结尾

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

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

>>> ({delete:1})
SyntaxError: Unexpected token delete
>>> ({'delete':1})
Object
Run Code Online (Sandbox Code Playgroud)

另一个例子:

>>> ({first-name:'john'})
SyntaxError: Unexpected token -
>>> ({'first-name':'john'})
Object
>>> ({'first-name':'john'})['first-name']
"john"
Run Code Online (Sandbox Code Playgroud)

  • 此外,许多JSON分析都不会处理不带引号的属性.例如在Chrome中:`JSON.parse('{"a":3}')`没问题,`JSON.parse('{a:3}')`引发异常. (3认同)
  • 实际上``"key":'value'}`是无效的JSON,因为需要在键和_string_值周围加双引号. (2认同)

Que*_*tin 11

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

后者是无效的JSON(引用的名称在JSON中是必需的).

  • +1,重要的区别是一个是JSON,另一个不是. (4认同)
  • @molf:技术上都不是JSON;) (3认同)
  • @Magnus:这不是一个字符串.JSON是一种数据格式. (3认同)