JSON 和 JavaScript 对象有什么区别
这两个东西长得几乎一样,所以经常被当成一回事。
但一个是文本,一个是内存里的对象。这个区别决定了它们能做什么、不能做什么。
JSON 是字符串
存在文件里、通过 HTTP 传输的,都是 JSON 文本。它没有方法,不能直接 obj.name 取值,必须先 parse。
JavaScript 对象是解析之后的结果,有原型、有方法、能动态加属性。
语法上的四个差异
JSON 的键必须用双引号,JS 对象可以不写引号。
JSON 不能有函数,JS 对象可以有方法。
JSON 不能有 undefined,JS 对象可以有。
JSON 不能写注释,JS 对象可以。
所以一段合法的 JS 对象字面量,不一定是合法 JSON。反过来,合法 JSON 一定能被 JS 解析。
转换
对象转文本用 JSON.stringify,文本转对象用 JSON.parse。
转换过程中会丢东西:函数、undefined、Symbol 都会消失,Date 会变成字符串,NaN 会变成 null。这些在调试时经常被忽略。
一个实际影响
后端返回的 JSON 里如果有 "created_at": "2026-11-04T10:00:00Z",parse 之后它还是字符串,不是 Date。想用日期方法,得自己转。
前端传对象给后端时,如果对象里有 undefined,序列化后这个字段会直接消失。后端可能因此报“缺少必填参数”。
怎么确认
不确定一段内容是不是 JSON,别看它像不像,直接校验。
贴进 JSON 在线解析工具,能解析就是,报错就不是。比凭经验判断可靠。