JavaScript中的Object.assign怎么用?

来源:安卓APP网作者:广州网站建设头衔:草根站长
导读:本期聚焦于小伙伴创作的《JavaScript中的Object.assign怎么用?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《JavaScript中的Object.assign怎么用?》有用,将其分享出去将是对创作者最好的鼓励。

Object.assign是JavaScript中用于对象属性复制的内置方法,属于ES6新增的Object对象静态方法,主要用来将一个或多个源对象的自身可枚举属性复制到目标对象,最终返回处理后的目标对象。它的核心逻辑是遍历源对象的所有可枚举自身属性,把这些属性依次赋值到目标对象上,如果目标对象已经存在同名属性,源对象的属性值会覆盖目标对象的原有值。

JavaScript中的Object.assign怎么用?

基本语法

Object.assign的语法格式如下:

// target是目标对象,sources是一个或多个源对象
Object.assign(target, ...sources)

其中target是接收属性的目标对象,sources是提供属性的源对象,可以有多个。方法执行后会返回修改后的target对象,因此我们可以直接使用返回的结果,也可以后续操作target

常见使用场景

1. 合并多个对象

当需要把多个对象的属性合并到一个对象中时,Object.assign是非常便捷的选择:

const obj1 = { name: '张三', age: 20 };
const obj2 = { gender: '男', hobby: '篮球' };
const obj3 = { age: 21, city: '北京' };

// 合并三个对象,后面的源对象同名属性会覆盖前面的
const mergedObj = Object.assign({}, obj1, obj2, obj3);
console.log(mergedObj); 
// 输出:{ name: '张三', age: 21, gender: '男', hobby: '篮球', city: '北京' }

这里第一个参数传入空对象{}作为目标对象,避免修改原有的obj1、obj2、obj3,合并后的结果会存放在新的对象中。

2. 实现对象浅拷贝

如果不传入额外的源对象,只把需要拷贝的对象作为源对象,目标对象设为空对象,就可以实现对象的浅拷贝:

const originalObj = { a: 1, b: { c: 2 } };
const copiedObj = Object.assign({}, originalObj);

console.log(copiedObj); // 输出:{ a: 1, b: { c: 2 } }
// 修改拷贝对象的基本类型属性,不会影响原对象
copiedObj.a = 3;
console.log(originalObj.a); // 输出:1
// 修改拷贝对象的引用类型属性,会影响原对象
copiedObj.b.c = 4;
console.log(originalObj.b.c); // 输出:4

可以看到Object.assign只能拷贝对象的自身可枚举属性,对于引用类型的属性,拷贝的是引用地址,因此属于浅拷贝,修改拷贝对象中的引用类型属性会影响原对象。

使用注意事项

  • 只会复制可枚举自身属性:继承的属性、不可枚举的属性都不会被复制到目标对象中。
  • 属性覆盖规则:如果多个源对象有同名属性,排在后面的源对象的属性会覆盖前面的。
  • 异常容错:如果源对象中有null或者undefined,会被忽略,不会报错,也不会复制任何属性。
  • 访问器属性处理:如果源对象的属性是getter,那么复制到目标对象的是getter的返回值,而不是getter本身。

和扩展运算符的对比

对象扩展运算符{...obj}也能实现对象合并和浅拷贝,和Object.assign的作用类似,但有一些细微区别:

对比项Object.assign对象扩展运算符
语法简洁度需要调用方法,传参相对繁琐语法更简洁,直接展开对象
属性覆盖逻辑后面的源对象属性覆盖前面的后面的属性覆盖前面的,逻辑一致
兼容性ES6支持,部分旧环境需要polyfill同样是ES6特性,兼容性基本一致

实际开发中可以根据场景选择,简单的合并或拷贝用扩展运算符更直观,需要兼容更旧的环境或者需要明确调用方法逻辑时可以用Object.assign。

Object.assignJavaScript对象合并浅拷贝修改时间:2026-06-06 07:41:28

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。