JSON和JavaScript对象有什么区别?

参见英文答案 > What is the difference between JSON and Object Literal Notation?                                    10个
我是JSON和JavaScript对象的新手.

>有人可以解释JSON和JavaScript对象之间的区别吗?
>他们有什么用途?
>一个比另一个好吗?还是取决于具体情况?
>何时使用哪一种,在什么情况下?
>为什么首先创建JSON?它的主要目的是什么?
>有人可以举例说明何时应该使用JSON而不是JavaScript对象,反之亦然?

最佳答案
首先你应该知道JSON是什么:

>它是与语言无关的数据交换格式.

JSON的语法受JavaScript Object Literal表示法的启发,但它们之间存在差异.

例如,在JSON中必须引用所有键,而在对象文字中,这不是必需的:

// JSON:
{ "foo": "bar" }

// Object literal:
var o = { foo: "bar" };

引号在JSON上是必需的,因为在JavaScript中(更确切地说,在ECMAScript 3rd.版本中),不允许使用保留字作为属性名称,例如:

var o = { if: "foo" }; // SyntaxError in ES3

而使用字符串文字作为属性名称(引用属性名称)不会产生任何问题:

var o = { "if": "foo" }; 

那么对于“兼容性”(并且可能很容易评估?),引号是强制性的.

JSON中的数据类型也限制为以下值:

>字符串
>数量
>对象
>数组
>文字为:

>真的
>假
> null

字符串的语法会发生变化.它们必须用双引号分隔,而在JavaScript中,您可以互换使用单引号或双引号.

// Invalid JSON:
{ "foo": 'bar' }

接受的JSON语法也会发生变化,在JavaScript中你可以使用Hexadecimal Literals,例如0xFF,或者(臭名昭着的)Octal Literals,例如: 010.在JSON中,您只能使用十进制文字.

// Invalid JSON:
{ "foo": 0xFF }

有一些错误的实现(Firefox 3.5,IE8,json2.js),其中错误地允许八进制文字,例如JSON.parse(’01’)应该产生一个SyntaxError.

转载注明原文:JSON和JavaScript对象有什么区别? - 代码日志