Object.assign 是 JavaScript 中实现对象浅拷贝的常用方法,通过复制源对象的可枚举属性到目标对象;它只进行一层拷贝,嵌套对象仍共享引用;合并时同名属性后出现的会覆盖前面的;ES6+ 中可用展开运算符 {...obj} 替代,语法更简洁且不改变原型链。

Object.assign 是 JavaScript 中实现对象浅拷贝最常用的方法之一,它通过将一个或多个源对象的可枚举属性复制到目标对象来完成拷贝。
基本用法:创建新对象作为目标
为避免修改原对象,通常传入一个空对象 {} 作为第一个参数(目标对象):
const copy = Object.assign({}, originalObj);- 这样
copy和originalObj是两个独立的对象,但它们的属性值如果是引用类型(如对象、数组),仍会共享同一内存地址。
注意嵌套对象仍是引用 —— 典型浅拷贝特征
如果原对象含有嵌套结构,Object.assign 不会递归拷贝,只复制顶层属性的引用:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
const obj = { a: 1, b: { c: 2 } };const copy = Object.assign({}, obj);-
copy.b.c = 3;会同时影响obj.b.c,因为copy.b和obj.b指向同一个对象。
合并多个对象时的覆盖规则
当有多个源对象且存在同名属性,后面的对象会覆盖前面的:
立即学习“Java免费学习笔记(深入)”;
const a = { x: 1, y: 2 };const b = { y: 3, z: 4 };-
Object.assign({}, a, b)返回{ x: 1, y: 3, z: 4 }。
兼容性与替代写法
Object.assign 在 ES6+ 环境中广泛支持,IE11 及以上可用;若需兼容更老环境,可用 polyfill 或展开运算符替代:
- ES6+ 推荐写法:
const copy = { ...originalObj };(同样为浅拷贝) - 两者行为一致,但展开运算符语法更简洁,且不改变目标对象的原型链(
Object.assign创建的对象默认继承自Object.prototype)。

















