推荐用展开运算符(...)合并对象,语法简洁且只做浅拷贝;object.assign()兼容性更好但需传空对象作目标;二者均不处理嵌套属性,深合并需lodash的_.merge()或手动实现。

用 Object.assign() 或展开运算符(...)就能轻松合并多个对象,生成一个新对象,原对象不受影响。
用展开运算符合并(推荐)
语法简洁、可读性强,是现代 JavaScript 的首选方式。所有对象的属性会按顺序复制到新对象中,后出现的同名属性会覆盖前面的。
- 基本写法:
const merged = { ...obj1, ...obj2, ...obj3 }; - 支持任意数量的对象,包括空对象或
undefined(但不能是null,否则报错) - 注意:只做浅拷贝,嵌套对象不会被递归合并
用 Object.assign() 合并
兼容性更好(支持 IE),功能与展开运算符一致,也返回新对象(第一个参数是目标对象,建议传空对象避免意外修改)。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 标准写法:
const merged = Object.assign({}, obj1, obj2, obj3); - 如果第一个参数不是空对象(比如写成
Object.assign(obj1, obj2)),就会直接修改obj1 - 同样只做浅拷贝,且对
null和undefined会跳过(不报错)
处理嵌套对象(需深合并)
默认方法都不处理深层结构。如需真正合并嵌套属性(例如两个对象都有 user: { name: 'A' },希望结果是 user: { name: 'A', age: 25 }),得借助工具或手动实现:
- 使用 Lodash 的
_.merge():它会递归合并,同名对象属性不覆盖而是继续合并 - 自己写简易深合并函数(适合简单场景),或用结构化克隆 + 递归遍历(注意循环引用)
合并时注意键名类型
对象键可以是字符串、数字或 Symbol。展开运算符和 Object.assign() 都能正确处理这三类键:
- 数字键会被自动转为字符串(如
{ 1: 'a' }等价于{ '1': 'a' }) - Symbol 键也会被保留,但需确保你确实需要它(普通合并很少涉及)
- 若对象有 getter/setter,它们不会被复制到新对象中,只有当前值会被取出来
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










