js实现深拷贝和浅拷贝
时间: 2023-09-21 10:09:35 浏览: 120
JS浅拷贝和深拷贝原理与实现方法分析
深拷贝和浅拷贝是在 JavaScript 中复制对象或数组时经常遇到的概念。
浅拷贝只是复制了对象或数组的引用,而不是复制其内容。当修改被复制的对象或数组时,原始对象或数组也会被修改。
深拷贝则是创建一个完全独立的对象或数组,包括其所有的嵌套对象或数组。修改深拷贝后的对象或数组不会影响原始对象或数组。
以下是实现深拷贝和浅拷贝的几种常见方法:
浅拷贝:
1. 使用`Object.assign`方法:
```javascript
const shallowCopy = Object.assign({}, obj);
```
2. 使用扩展运算符`...`:
```javascript
const shallowCopy = { ...obj };
```
3. 使用`Array.slice()`方法(仅适用于数组):
```javascript
const shallowCopy = arr.slice();
```
深拷贝:
1. 使用`JSON.parse(JSON.stringify())`方法(仅适用于 JSON 安全的对象):
```javascript
const deepCopy = JSON.parse(JSON.stringify(obj));
```
2. 使用递归实现深拷贝函数:
```javascript
function deepClone(obj) {
if (typeof obj !== 'object' || obj === null) {
return obj;
}
let clone = Array.isArray(obj) ? [] : {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
clone[key] = deepClone(obj[key]);
}
}
return clone;
}
const deepCopy = deepClone(obj);
```
需要注意的是,使用`JSON.parse(JSON.stringify())`方法在处理一些特殊的数据类型(如函数、正则表达式、Date 对象等)时可能会出现问题。在这种情况下,使用递归实现深拷贝函数是更可靠的方法。
阅读全文