object.assign 是 javascript 中实现对象浅拷贝的常用方法,仅复制可枚举自有属性,不处理原型链、不可枚举属性及嵌套对象引用,适用于合并对象或设置默认值。

Object.assign 是 JavaScript 中实现对象浅拷贝最常用的方法之一,它把一个或多个源对象的可枚举自有属性复制到目标对象,并返回目标对象。
基本用法:创建新对象完成浅拷贝
避免直接修改原对象,通常将空对象 {} 作为第一个参数(目标对象):
const original = { a: 1, b: { c: 2 } };
const copy = Object.assign({}, original);
此时 copy 是 original 的浅拷贝:顶层属性被复制,但嵌套对象仍共享引用。
注意:只拷贝可枚举的自有属性
Object.assign 不会复制原型链上的属性,也不会拷贝不可枚举属性(如 Object.defineProperty 设置的 enumerable: false 属性):
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- 继承的属性(如
toString)不会被拷贝 - Symbol 类型键若为可枚举,会被拷贝;但非可枚举 Symbol 不会
- getter/setter 若定义在源对象自身且可枚举,其返回值会被“读取后赋值”,而非保留访问器特性
常见陷阱:嵌套对象仍是引用
浅拷贝只复制第一层,深层嵌套对象未被递归处理:
const obj = { x: 1, y: { z: 2 } };
const cloned = Object.assign({}, obj);
cloned.y.z = 99;
console.log(obj.y.z); // 输出 99 —— 原对象也被改了
如需深拷贝,不能只靠 Object.assign,应考虑 structuredClone(现代环境)、JSON.parse(JSON.stringify())(简单场景,有局限)或第三方库(如 Lodash 的 cloneDeep)。
实用技巧:合并多个对象或添加默认值
常用于配置合并、设置默认选项:
const defaults = { theme: 'light', fontSize: 14 };
const userOptions = { theme: 'dark' };
const finalConfig = Object.assign({}, defaults, userOptions);
// { theme: 'dark', fontSize: 14 }
- 后出现的对象属性会覆盖前面的同名属性
- 顺序很重要:默认值放前,用户配置放后
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










