Object.assign 是 JavaScript 中实现对象浅拷贝的常用方法,仅复制可枚举自身属性且只拷贝一层,嵌套对象仍共享引用;它不处理原型属性、不可枚举属性、Symbol 属性,且会触发 getter;深拷贝需用 structuredClone、JSON 方法或第三方库。

Object.assign 是 JavaScript 中实现对象浅拷贝最常用的方法之一,它会将一个或多个源对象的所有可枚举自身属性复制到目标对象,并返回目标对象。
基本用法:创建新对象进行拷贝
为避免修改原对象,通常把空对象 {} 作为第一个参数(目标对象):
const original = { a: 1, b: { c: 2 } };
const copy = Object.assign({}, original);
此时 copy 和 original 的顶层属性互不影响,但嵌套对象仍共享引用。
浅拷贝的局限性:嵌套对象不被递归复制
Object.assign 只做一层拷贝,对嵌套对象、数组等引用类型,只复制其引用地址:
-
copy.a = 99→ 不影响original.a(基础类型独立) -
copy.b.c = 99→original.b.c也会变成 99(引用同一对象)
常见误用与注意事项
- 不要用已有对象作目标:如
Object.assign(original, {...})会直接修改原对象 - 仅拷贝可枚举的自身属性(不包括原型链上的属性、不可枚举属性、symbol 属性)
- 如果源对象有 getter,赋值时会触发 getter 并取其返回值,而非保留 getter 本身
替代方案提示(按需选择)
若需深拷贝,不能依赖 Object.assign,可考虑:
- 结构化克隆(现代环境):
structuredClone(obj) - JSON 序列化(仅适用于纯数据,不含函数、undefined、Date 等):
JSON.parse(JSON.stringify(obj)) - 第三方库如 Lodash 的
_.cloneDeep()
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











