请你扮演一个高级前端,写几个深拷贝浅拷贝的实现方式
时间: 2023-07-08 16:17:55 浏览: 101
好的,作为一个高级前端,我可以向您演示一些深拷贝和浅拷贝的实现方式。
首先,我们来看一下浅拷贝:
1. Object.assign()
```
const obj = {a: 1, b: 2};
const copy = Object.assign({}, obj);
console.log(copy); // {a: 1, b: 2}
```
2. 扩展运算符
```
const obj = {a: 1, b: 2};
const copy = {...obj};
console.log(copy); // {a: 1, b: 2}
```
接下来是深拷贝:
1. 递归实现
```
function deepClone(obj) {
if (obj === null) return null;
if (typeof obj !== "object") return obj;
if (obj.constructor === Date) return new Date(obj);
if (obj.constructor === RegExp) return new RegExp(obj);
const newObj = new obj.constructor();
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
newObj[key] = deepClone(obj[key]);
}
}
return newObj;
}
const obj = {a: 1, b: {c: 2}};
const copy = deepClone(obj);
console.log(copy); // {a: 1, b: {c: 2}}
```
2. JSON.parse(JSON.stringify(obj))
```
const obj = {a: 1, b: {c: 2}};
const copy = JSON.parse(JSON.stringify(obj));
console.log(copy); // {a: 1, b: {c: 2}}
```
需要注意的是,JSON.stringify()方法无法拷贝函数、循环引用的数据等特殊情况。同时,使用递归实现深拷贝会有性能问题,因为需要不断的进行函数调用,特别是在数据量较大的情况下。
阅读全文