

新闻资讯
技术学院Object.assign是浅拷贝,仅复制对象第一层属性,对嵌套对象复制引用地址,导致原对象与新对象共享深层数据;深拷贝则递归复制所有层级,确保完全独立。
Object.assign 是浅拷贝,不是深拷贝。 它只复制对象第一层属性的值,遇到嵌套对象或数组时,复制的是引用地址,原对象和新对象仍共享同一份深层数据。
浅拷贝只复制对象顶层属性,对基本类型(string、number、boolean 等)是值拷贝;对引用类型(Object、Array、Date 等)是引用拷贝,即新旧对象指向同一内存地址。
rray.from(arr):也可用于数组浅拷贝深拷贝会递归复制所有层级,确保新对象与原对象完全独立,修改互不影响。
const deepCopy = structuredClone(obj);
比如:
const obj = { a: 1, b: { c: 2 } };
const copy = Object.assign({}, obj);
copy.b.c = 3;
console.log(obj.b.c); // 输出 3 —— 原对象被意外修改了
因为 b 是对象,Object.assign 只复制了它的引用,copy.b 和 obj.b 指向同一个对象。
{...obj} 或 Object.assign 就够了,轻量高效structuredClone
基本上就这些。深浅拷贝本质是“是否递归处理引用类型”,抓住这点,选哪种方式就很清楚了。