Object.assign 是 JavaScript 中实现对象浅拷贝的常用方法,仅复制可枚举自有属性,不处理原型链、不可枚举属性及嵌套对象,对 null/undefined 源对象跳过,Symbol 属性支持良好。

Object.assign 是 JavaScript 中实现对象浅拷贝最常用的方法之一,它会将一个或多个源对象的可枚举自有属性复制到目标对象,并返回目标对象。
基本用法:创建新对象作为目标
为避免修改原对象,通常把空对象 {} 作为第一个参数(目标对象):
const original = { a: 1, b: { c: 2 } };
const copy = Object.assign({}, original);
此时 copy 是 original 的浅拷贝:基础类型值被复制,引用类型值(如对象、数组)仍共享同一内存地址。
注意:只拷贝可枚举的自有属性
Object.assign 不会复制原型链上的属性,也不会拷贝不可枚举属性(例如通过 Object.defineProperty 设置 enumerable: false 的属性):
const parent = { x: 'from-parent' };
const child = Object.create(parent);
child.y = 'own';
Object.defineProperty(child, 'z', { value: 'hidden', enumerable: false });
const copy = Object.assign({}, child);
// copy => { y: 'own' }
// x 和 z 都不会出现在 copy 中
常见误区与替代建议
以下情况需特别留意:
- 嵌套对象不会被深拷贝 —— 修改
copy.b.c会影响original.b.c - 不能正确处理
null或undefined作为源对象(会跳过) - 对 Symbol 类型属性支持良好(ES6+),但老环境需注意兼容性
- 如果需要深拷贝,应改用结构化克隆(
structuredClone)或第三方库(如 Lodash 的cloneDeep)


















