最可靠的方法是修改嵌套属性并检查原对象是否受影响:若 original.config.theme 仍为 'dark' 且 copy.config === original.config 为 false,则为深拷贝;需警惕 JSON.stringify 等伪深拷贝陷阱。

直接看引用是否断裂——这是最可靠、最直观的检测方式。
修改嵌套属性,观察原对象是否受影响
深拷贝的核心特征是“完全独立”,所以只需对拷贝后对象的嵌套引用类型(如数组、子对象)做修改,再检查原始对象对应位置是否变化。
- 准备一个含嵌套结构的源对象,比如:
{ name: 'Alice', config: { theme: 'dark', size: 14 } } - 用你的方式生成拷贝(如
JSON.parse(JSON.stringify(obj))或递归函数) - 执行
copy.config.theme = 'light' - 检查
original.config.theme:如果仍是'dark',说明是深拷贝;如果也变成'light',就是浅拷贝
比较嵌套属性的内存地址是否相同
JavaScript 中,两个对象或数组是否为同一引用,可用 === 判断。深拷贝后,嵌套部分应指向不同地址。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 检测子对象:
copy.config === original.config→ 若为false,说明config被重新创建,是深拷贝的关键信号 - 检测数组:
copy.list === original.list→ 同样,false表明数组被真正复制而非共享 - 注意:仅对第一层属性做
===比较无意义(浅拷贝也会让顶层对象不同),必须深入到嵌套的引用类型层级
留意常见“伪深拷贝”陷阱
有些方法看似深拷贝,实则有局限,检测时需额外验证边界情况:
立即学习“Java免费学习笔记(深入)”;
-
JSON.parse(JSON.stringify(obj)):无法处理function、undefined、Date、RegExp、Map、Set、循环引用;若原对象含这些,拷贝后会丢失或报错,不是真正深拷贝 - 自定义递归函数:需确认是否递归处理了
null、数组、普通对象、以及Date/RegExp等特殊对象;否则可能在某一层退化为浅拷贝 - 第三方库(如 Lodash 的
_.cloneDeep):一般可靠,但仍建议用上述修改法+地址比对法双重验证,尤其在复杂数据结构下
写个通用检测函数辅助判断
可封装一个轻量函数,自动测试典型嵌套结构:
- 构造测试对象:
{ a: 1, b: [2, 3], c: { d: 4 } } - 对
copy.b.push(5)和copy.c.d = 99 - 断言:
original.b.length === 2 && original.c.d === 4 - 返回
true即通过深拷贝检验

















