JavaScript 对象合并:Object.assign 与扩展运算符

答案:推荐优先使用扩展运算符合并对象,因其语法简洁、不修改原对象且可读性强;若需兼容老浏览器则选用Object.assign()。两者均为浅合并,深层合并需借助其他方法。

JavaScript 对象合并:Object.assign 与扩展运算符

javaScript 中,合并对象是日常开发中常见的需求。比如处理配置项、更新状态或组合多个数据源时,都需要把多个对象的属性整合到一个新对象中。目前最常用的方法有两种:Object.assign()扩展运算符(…)。它们看起来很像,但在使用方式和细节上有些差异。

Object.assign() 方法

Object.assign()es6 引入的一个方法,用于将一个或多个源对象的所有可枚举属性复制到目标对象中,并返回修改后的目标对象。

基本语法:

Object.assign(target, …sources)

立即学习Java免费学习笔记(深入)”;

示例:

const defaults = { theme: ‘light’, fontSize: 14 };
const userPrefs = { theme: ‘dark’ };
const config = Object.assign({}, defaults, userPrefs);

结果:config 会是 { theme: ‘dark’, fontSize: 14 }。这里第一个参数传空对象是为了避免修改原始对象。

特点:

  • 可以合并任意数量的对象
  • 从左到右依次覆盖同名属性
  • 会改变第一个传入的对象(除非第一个是空对象)
  • 只拷贝自身可枚举属性,不包括继承属性和不可枚举属性

扩展运算符(…)

扩展运算符是 ES2018 推出的语法,允许将对象中的所有可枚举属性“展开”到新对象中。

示例:

const defaults = { theme: ‘light’, fontSize: 14 };
const userPrefs = { theme: ‘dark’ };
const config = { …defaults, …userPrefs };

结果与上面一致:{ theme: ‘dark’, fontSize: 14 }。后面的属性会覆盖前面的同名属性。

JavaScript 对象合并:Object.assign 与扩展运算符

算家云

高效、便捷的人工智能算力服务平台

JavaScript 对象合并:Object.assign 与扩展运算符 37

查看详情 JavaScript 对象合并:Object.assign 与扩展运算符

优势:

  • 语法更简洁直观
  • 天然创建新对象,不会意外修改原对象
  • 更容易控制合并顺序,比如可以在中间插入其他字段

例如:

const config = { …defaults, theme: ‘custom’, …userPrefs };

这样可以在合并时插入特定值。

深层合并需要注意的问题

无论是 Object.assign() 还是扩展运算符,都只是浅合并。也就是说,如果对象的属性是对象或数组,它们的引用会被复制,而不是递归合并。

例如:

const a = { nested: { value: 1 } };
const b = { nested: { extra: 2 } };
const result = { …a, …b }; // 结果是 { nested: { extra: 2 } }

原来的 nested.value 被完全替换,没有合并进去。如果需要深合并,得借助 Lodash 的 merge 方法,或者自己实现递归逻辑。

选择建议

现代开发中推荐优先使用扩展运算符,原因如下:

  • 代码更清晰,可读性强
  • 不会意外污染原对象
  • 与数组扩展语法风格统一
  • 在构建对象字面量时更灵活

但如果你需要兼容老版本浏览器(如 IE),或者必须在不支持 ES2018 的环境中运行代码,Object.assign() 仍是可靠的选择。

基本上就这些。两种方式都能完成任务,选哪个取决于项目环境和个人偏好。

上一篇
下一篇
text=ZqhQzanResources