一尘不染

JSON和JavaScript对象之间有什么区别?

javascript

我是JSON和JavaScript对象的新手。

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

阅读 245

收藏
2020-04-25

共1个答案

一尘不染

首先,您应该知道什么是JSON:

  • 它是与 语言无关的 数据交换格式。

JSON的语法受JavaScript对象文字表示法的启发,但是它们之间存在差异。

例如,在JSON中,所有 键都 必须加引号,而在对象文字中,则不需要:

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

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

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

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

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

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

因此,对于 “兼容性” (也许容易评估?),引号是强制性的。

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

  • string
  • number
  • object
  • array
  • 文字为:
    • true
    • false
    • null

Strings变化的语法。它们 必须双引号 分隔,而在JavaScript中,您可以互换使用单引号或双引号。

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

可接受的JSON语法Numbers也发生了变化,例如0xFF,在JavaScript中,您可以使用十六进制文字,或(臭名昭著的)八进制文字,例如010。在JSON中,您只能使用十进制文字。

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

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

2020-04-25