JSON 和 JavaScript 对象的区别

很多刚接触前端的同学会问:{"name": "Tom"} 这不就是 JavaScript 对象吗?两者长得几乎一样,但本质上完全不是一回事。JSON 是一种数据格式(一段字符串),JavaScript 对象是内存中的数据结构。下面讲清它们的 5 个关键区别。

区别一:本质不同

所以 JSON 需要被解析(JSON.parse)才能变成 JS 对象;JS 对象需要被序列化(JSON.stringify)才能变成 JSON 字符串。

区别二:键是否必须加引号

JSON 的键必须用双引号包裹,而 JavaScript 对象的键可以省略引号(只要符合标识符规则):

{ "name": "Tom" }      // ✅ 合法 JSON
{ name: "Tom" }        // ❌ 非法 JSON(但作为 JS 对象合法)

区别三:值的类型限制

JSON 只支持 6 种类型:字符串、数字、布尔值、null、对象、数组。而 JavaScript 对象的值可以是任意类型,包括:

区别四:语法严格程度

JSON 比 JavaScript 严格得多,下面这些都是「JS 里合法、JSON 里非法」的写法:

写法 JavaScript JSON
单引号字符串 ✅ ❌ 必须双引号
尾逗号 {"a":1,} ✅ ❌
注释 // 或 /* */ ✅ ❌
键不加引号 ✅ ❌

区别五:语言无关性

JSON 是跨语言的标准格式,Python 的 json.loads、Java 的 Jackson、Go 的 encoding/json 都能解析它。而 JavaScript 对象只能在 JavaScript 里使用。这也是为什么 API 接口都用 JSON 而不是 JS 对象来传输数据。

如何避免混淆

实际开发中,判断一段代码是 JSON 还是 JS 对象,看两点就够了:

  1. 它在 .json 文件里、或是接口返回的字符串 → 是 JSON,键必须加双引号。
  2. 它在 .js 文件里、直接作为变量使用 → 是 JS 对象,语法更宽松。

如果拿到一段 JSON 不确定是否合法,可以用 JSON 在线校验工具 一键检查——它会自动指出错误所在的行和列。

延伸阅读