在 JavaScript 中,对象复制主要有以下几种方法:
一、浅复制(Shallow Copy)
- Object.assign() 方法
- 基本概念:将所有可枚举属性的值从一个或多个源对象复制到目标对象。它返回目标对象。
- 优势:简单易用,对于简单的对象复制场景很方便。
- 示例代码:
- 示例代码:
- 应用场景:当对象的属性都是基本数据类型(如数字、字符串、布尔值)时,可以使用这种方法进行复制。
- 数组的扩展运算符(...)
- 基本概念:对于数组,可以使用扩展运算符来创建一个新的数组副本。
- 示例代码:
- 示例代码:
二、深复制(Deep Copy)
- JSON.parse() 和 JSON.stringify() 方法
- 基本概念:先将对象转换为 JSON 字符串,然后再解析为新的对象。
- 优势:实现简单,适用于对象结构不太复杂且属性值不包含函数、RegExp 对象、Date 对象、undefined、Infinity、-Infinity 的情况。
- 示例代码:
- 示例代码:
- 局限性:无法复制函数、特殊对象等。
- 使用第三方库(如 lodash 的 _.cloneDeep 方法)
- 优势:功能强大,能处理各种复杂的情况。
- 示例代码(需要先引入 lodash 库):
- 示例代码(需要先引入 lodash 库):
如果遇到对象复制后修改副本影响到原对象的问题,通常是因为使用的是浅复制方法,并且对象中存在引用类型的属性。要解决这个问题,可以使用深复制方法。
需要注意的是,在进行对象复制时,要根据对象的结构和具体需求选择合适的复制方式。