object.assign 是 javascript 中实现对象浅拷贝的常用方法,只复制可枚举自有属性,不处理原型链和不可枚举属性;嵌套对象仍为引用,修改会影响原对象;多源对象合并时后出现的同名属性会覆盖前面的。

Object.assign 是 JavaScript 中实现对象浅拷贝最常用的方法之一,它会将一个或多个源对象的可枚举自有属性复制到目标对象,并返回目标对象。
基本用法:创建新对象作为目标
为避免修改原对象,通常传入一个空对象 {} 作为第一个参数(目标对象):
const copy = Object.assign({}, original);
此时 copy 是 original 的浅拷贝 —— 基本类型值被复制,引用类型值仍共享同一内存地址。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
注意:只拷贝可枚举的自有属性
Object.assign 不会复制原型链上的属性,也不会拷贝不可枚举属性(如 Object.defineProperty 设置的 enumerable: false 属性):
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 中
常见陷阱:嵌套对象仍是引用
浅拷贝意味着嵌套对象不会被递归复制。修改嵌套属性会影响原对象:
-
original.b.c = 99;→copy.b.c也会变成99 - 若需深拷贝,应使用
structuredClone()(现代环境)、JSON 序列化(无函数/undefined/Symbol/循环引用),或第三方库如 Lodash 的cloneDeep
合并多个对象时的覆盖规则
当有多个源对象且属性名重复时,后出现的对象会覆盖前面的同名属性:
const a = { x: 1, y: 1 };const b = { y: 2, z: 2 };
const c = { z: 3 };
const merged = Object.assign({}, a, b, c);
// merged => { x: 1, y: 2, z: 3 }
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










