js中深浅拷贝区别如何实现
时间: 2024-05-10 21:15:40 浏览: 52
js中的深拷贝和浅拷贝总结
5星 · 资源好评率100%
深拷贝和浅拷贝都是对于引用类型的拷贝而言的。
浅拷贝只是拷贝了引用类型的地址,所以拷贝完之后,原始值和拷贝值指向同一块内存地址,对其中一个进行修改,另一个也会跟着改变。
深拷贝则是完全拷贝了一份全新的值,所以原始值和拷贝值指向不同的内存地址,修改其中一个,另一个不会受到影响。
以下是一些实现深浅拷贝的方法:
浅拷贝:
1. Object.assign()方法:
```javascript
let obj = {
name: 'Tom',
age: 18
};
let newObj = Object.assign({}, obj);
```
2. 扩展运算符(...)
```javascript
let obj = {
name: 'Tom',
age: 18
};
let newObj = {...obj};
```
3. Array.prototype.concat()方法:
```javascript
let arr = [1, 2, 3];
let newArr = arr.concat();
```
深拷贝:
1. JSON.parse(JSON.stringify())方法:
```javascript
let obj = {
name: 'Tom',
age: 18
};
let newObj = JSON.parse(JSON.stringify(obj));
```
但是,该方法有一些限制:
- 该方法无法处理函数、undefined、symbol等数据类型;
- 该方法无法处理循环引用的数据结构。
2. 递归拷贝:
```javascript
function deepClone(obj) {
if (typeof obj !== 'object' || obj === null) {
return obj;
}
let newObj = Array.isArray(obj) ? [] : {};
for (let key in obj) {
newObj[key] = deepClone(obj[key]);
}
return newObj;
}
```
该方法可以递归拷贝对象和数组,但是同样无法处理循环引用的数据结构。
阅读全文