json.parse(json.stringify(obj))可实现简单深拷贝,但仅适用于纯数据对象(string、number、boolean、null、object、array),不支持function、undefined、symbol、date、regexp、nan、infinity、-0及循环引用,遇不支持类型会静默丢失或报错。

JavaScript 中用 JSON.parse(JSON.stringify(obj)) 可以实现一种简单、快捷的深拷贝,但它有明显限制,只适用于纯数据对象(不包含函数、undefined、Symbol、Date、RegExp、Map、Set、BigInt 等)。
适用场景:仅含基本类型和嵌套对象/数组的数据
这种方法本质是把对象先转成 JSON 字符串(会自动忽略不可序列化的值),再解析回新对象。原始对象结构会被完全重建,与原引用无关。
- 支持 string、number、boolean、null、普通 object、array
- 不支持 function、undefined、Symbol、Date、RegExp、NaN、Infinity、-0、循环引用
- 遇到不支持的值会静默丢失(如
undefined和函数会被跳过,Date变成空对象)
基础写法示例
直接一行搞定:
详细的 Three.js 3D 图形参考,涵盖场景设置、相机、几何体、材质、光照、动画、控制器、加载器、数学工具和调试。
const original = { name: "Alice", scores: [95, 87], info: { city: "Beijing" } };
const copy = JSON.parse(JSON.stringify(original));
修改 copy 不会影响 original,说明是深拷贝成功。
常见坑与注意事项
-
Date 对象失效:
JSON.stringify(new Date())输出字符串,JSON.parse后变成字符串而非 Date 实例 -
undefined 和 function 被丢弃:对象中字段值为
undefined或方法,在字符串化时被忽略 -
正则表达式变为空对象:
/abc/g→{} -
循环引用报错:
const obj = {}; obj.self = obj;会触发TypeError: Converting circular structure to JSON
什么情况下可以放心用?
适合处理从后端接口返回的纯 JSON 数据(比如配置项、列表、表单数据),且你明确知道结构里不含上述特殊类型。
- API 响应数据(通常是扁平或规则嵌套的对象/数组)
- localStorage 存取前后的临时拷贝
- 开发调试时快速复制一份做对比,不要求保真类型
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










