js中深拷贝和浅的方法
时间: 2024-06-12 10:10:11 浏览: 122
在 JavaScript 中,深拷贝和浅拷贝是两种不同的复制方式。浅拷贝只是复制了对象的引用,而不是对象本身,因此当原对象发生变化时,拷贝后的对象也会发生变化。而深拷贝则是完全复制了对象本身,因此原对象和拷贝后的对象互不影响。
以下是几种实现深拷贝和浅拷贝的方法:
1. 浅拷贝
- Object.assign() 方法
```javascript
let obj1 = { a: 1, b: 2 };
let obj2 = Object.assign({}, obj1);
console.log(obj2); // { a: 1, b: 2 }
```
- 扩展运算符
```javascript
let obj1 = { a: 1, b: 2 };
let obj2 = { ...obj1 };
console.log(obj2); // { a: 1, b: 2 }
```
- 数组的 slice() 方法
```javascript
let arr1 = [1, 2, 3];
let arr2 = arr1.slice();
console.log(arr2); // [1, 2, 3]
```
2. 深拷贝
- JSON.parse() 和 JSON.stringify() 方法
```javascript
let obj1 = { a: 1, b: { c: 2 } };
let obj2 = JSON.parse(JSON.stringify(obj1));
console.log(obj2); // { a: 1, b: { c: 2 } }
```
- 递归实现深拷贝
```javascript
function deepClone(obj) {
if (typeof obj !== 'object' || obj === null) {
return obj;
}
let result = Array.isArray(obj) ? [] : {};
for (let key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
result[key] = deepClone(obj[key]);
}
}
return result;
}
let obj1 = { a: 1, b: { c: 2 } };
let obj2 = deepClone(obj1);
console.log(obj2); // { a: 1, b: { c: 2 } }
```
阅读全文