Object.assign 是 JavaScript 中实现对象浅拷贝的常用方法,它将源对象的可枚举自有属性(含 Symbol 键)复制到目标对象并返回目标对象;只拷贝顶层属性,嵌套对象仍共享引用,不可枚举属性和继承属性被忽略,多源对象同名属性按顺序覆盖。

Object.assign 是 JavaScript 中实现对象浅拷贝最常用的方法之一,它会将一个或多个源对象的可枚举自有属性复制到目标对象,并返回目标对象。
基本用法:创建新对象作为目标
为避免修改原对象,通常传入一个空对象 {} 作为第一个参数(目标对象):
const newObj = Object.assign({}, originalObj);- 这样
newObj就是originalObj的浅拷贝,修改newObj的顶层属性不会影响originalObj
只拷贝顶层属性,嵌套对象仍共享引用
浅拷贝不递归处理嵌套结构。如果原对象中有对象、数组等引用类型,拷贝后两者仍指向同一内存地址:
const obj = { a: 1, nested: { x: 2 } };const copy = Object.assign({}, obj);-
copy.nested.x = 99;→obj.nested.x也会变成99
注意不可枚举属性和 symbol 键
Object.assign 只复制可枚举的自有属性(包括 Symbol 类型键),但忽略不可枚举属性(如 Object.prototype.toString)和继承属性:
立即学习“Java免费学习笔记(深入)”;
const obj = { a: 1 }; Object.defineProperty(obj, 'b', { value: 2, enumerable: false });-
Object.assign({}, obj)只包含a,不包含b
合并多个对象时的覆盖规则
当有多个源对象且属性名冲突时,靠后的对象会覆盖前面的同名属性:
-
Object.assign({ a: 1 }, { a: 2 }, { a: 3 })→{ a: 3 } - 适合用于配置项默认值合并:
Object.assign({ timeout: 5000 }, userOptions)


















