json.parse(json.stringify(obj))仅适用于纯数据对象的深拷贝,要求对象只含字符串、数字、布尔值、null、数组和普通对象;遇函数、undefined、date、regexp等会丢失或失真,推荐优先使用structuredclone()或lodash.clonedeep()。

JSON 方法(JSON.parse(JSON.stringify(obj)))确实能快速实现对象的深拷贝,但它不是通用解法,适用场景有限,需谨慎使用。
适用前提:纯数据对象
该方法仅适用于“可被 JSON 安全序列化”的值——即只包含字符串、数字、布尔值、null、数组和普通对象(不含函数、undefined、Symbol、Date、RegExp、Map、Set、BigInt、循环引用等)。
- 遇到
function或undefined字段,会被直接忽略(不报错但丢失) -
Date对象会变成字符串(如"2026-06-22T13:13:00.000Z"),不再是 Date 实例 -
RegExp变成空对象{};NaN、Infinity变成null - 原型链、getter/setter、不可枚举属性全部丢失
典型可用场景
适合临时处理简单配置、API 响应数据、表单初始状态快照等结构扁平、类型受限的纯数据。
- 从接口获取的用户列表(仅含 id/name/avatar 等基础字段)
- React/Vue 中需要隔离原始 state 的轻量副本(确认无特殊类型)
- 调试时快速生成一份“干净副本”用于对比或重置
常见误用与替代建议
一旦对象含非 JSON 类型,就该换方案。现代开发中更推荐:
- 结构简单且需兼容旧环境 → 使用
structuredClone()(Chrome 98+/Node.js 17+ 原生支持,安全、保留类型) - 需兼容老浏览器或复杂类型 → 使用 Lodash 的
cloneDeep() - 自定义逻辑强(如过滤字段、转换日期)→ 手写递归克隆或用
Object.assign()+ 深层遍历组合
一句话验证是否可用
执行 JSON.stringify(obj) 不报错,且结果字符串再用 JSON.parse() 还原后,关键字段值类型和行为仍符合预期,才可放心用。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











