Object.assign用于浅拷贝对象并合并属性,支持覆盖与扩展;但嵌套对象仍为引用,需深拷贝时用structuredClone或cloneDeep;现代开发更推荐使用展开运算符替代。

Object.assign 可以把多个源对象的可枚举属性复制到目标对象上,常用来浅拷贝对象并同时添加或覆盖字段。
基本用法:复制 + 添加新字段
把空对象 {} 作为目标对象,后面跟原对象和一个包含新字段的对象:
const original = { name: 'Alice', age: 30 };
const newObj = Object.assign({}, original, { city: 'Beijing', job: 'Engineer' });
// 结果:{ name: 'Alice', age: 30, city: 'Beijing', job: 'Engineer' }
注意是浅拷贝,嵌套对象不会被深复制
如果原对象里有引用类型(比如对象、数组),它们的引用会被直接复制,修改新对象里的嵌套值会影响原对象:
-
不安全示例:
const original = { user: { id: 1 } };<br> const newObj = Object.assign({}, original, { status: 'active' });<br> newObj.user.id = 999; // original.user.id 也会变成 999 - 需要深拷贝时,改用结构化克隆(
structuredClone)或第三方库(如 Lodash 的cloneDeep)
可以覆盖已有字段,顺序决定优先级
后出现的同名属性会覆盖前面的。利用这点可以“更新+扩展”:
-
Object.assign({}, original, { age: 31, country: 'China' })→age被更新,country被新增 - 多个源对象时,从左到右依次合并,右边的同名属性胜出
替代写法(更现代、更常用):展开运算符
ES6+ 推荐用对象展开语法,语义更清晰、代码更简洁:
const newObj = { ...original, city: 'Beijing', job: 'Engineer' };
// 效果等价,且同样为浅拷贝
展开运算符在可读性和函数式风格上更有优势,除非需要兼容非常老的环境,否则优先选它。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











