js实现浅拷贝和深拷贝
时间: 2023-10-24 16:19:44 浏览: 40
浅拷贝:
浅拷贝只是复制了对象的引用,而不是对象本身。因此,当原始对象发生更改时,拷贝的对象也会发生更改。
在 JavaScript 中,可以使用 `Object.assign()` 方法来进行浅拷贝,示例如下:
```javascript
const obj1 = { a: 1, b: 2 };
const obj2 = Object.assign({}, obj1);
console.log(obj2); // { a: 1, b: 2 }
```
深拷贝:
深拷贝会复制一个全新的对象,与原始对象无关。因此,即使原始对象发生更改,拷贝的对象也不会受到影响。
在 JavaScript 中,可以使用递归函数来实现深拷贝,示例如下:
```javascript
function deepClone(obj) {
if (typeof obj !== "object" || obj === null) {
return obj;
}
let cloneObj = {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
cloneObj[key] = deepClone(obj[key]);
}
}
return cloneObj;
}
const obj1 = { a: 1, b: { c: 2 } };
const obj2 = deepClone(obj1);
console.log(obj2); // { a: 1, b: { c: 2 } }
```
需要注意的是,深拷贝可能会导致性能问题,因为当对象嵌套层数很深时,递归会变得很慢。为了避免这种情况,可以考虑使用其他库,如 Lodash 的 `_.cloneDeep()` 方法。