JSON深拷贝仅支持纯JSON数据,会丢失函数、undefined、Symbol、Date、RegExp、Map、Set等类型,无法处理循环引用,且BigInt报错、NaN/Infinity转null、稀疏数组失真、不可枚举属性被忽略。

这不是真正意义上的深拷贝,只是对纯 JSON 兼容数据的“模拟复制”,很多关键信息会在过程中被丢弃或扭曲。
会丢失函数、undefined 和 Symbol
JSON 标准不支持这些类型,序列化时直接跳过或转为 null:
- 对象里的函数属性完全消失
- 值为 undefined 的属性被整个忽略(不是变成 null,而是键值对没了)
- Symbol 作为键或值,全部丢失,连同它对应的值一起消失
特殊对象全部失真
Date、RegExp、Map、Set、Error、ArrayBuffer 等内置类型无法保留原结构:
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
-
Date 变成 ISO 字符串,不再是 Date 实例,
instanceof Date返回 false -
RegExp 变成空对象
{},标志(g/i/m)和 lastIndex 全部清零 - Map/Set 被扁平化为空对象,键值对关系彻底丢失
- 自定义类实例退化为普通 plain object,原型方法、getter/setter 全部失效
循环引用直接崩溃
只要对象内部存在引用闭环(比如 a.b = a),JSON.stringify() 就会抛出 TypeError: Converting circular structure to JSON,没有任何降级处理机制,也无法定位具体哪一层出问题。
还有这些容易被忽略的问题
它们不会报错,但会悄悄改变数据语义:
- BigInt 直接触发 TypeError,无法序列化
-
NaN、Infinity、-Infinity 全部转为
null - 稀疏数组(如
[1, , 3])变成[1, null, 3] - 不可枚举属性(
enumerable: false)被跳过 - 非字符串键(数字、布尔)被强制转为字符串,影响后续逻辑判断

















