js深拷贝、浅拷贝怎么实现
深拷贝:
- 递归实现
通过递归遍历对象的每一个属性,然后进行复制,如果属性值是对象,则递归复制,这样就能够实现深拷贝。
function deepCopy(obj) {
if (typeof obj !== 'object') return obj;
const newObj = Array.isArray(obj) ? [] : {};
for (let key in obj) {
newObj[key] = deepCopy(obj[key]);
}
return newObj;
}
- JSON 方法
利用 JSON 对象的 stringify 和 parse 方法,将对象转换为 JSON 字符串,然后再将字符串转换为对象,这样就能够实现深拷贝。
function deepCopy(obj) {
return JSON.parse(JSON.stringify(obj));
}
但是这种方法有一些限制,例如对象中不能有函数、正则表达式等特殊类型的属性,否则会被转换为 null。
浅拷贝:
- Object.assign 方法
Object.assign 方法可以将源对象的属性复制到目标对象中,如果目标对象中已经存在同名属性,则会被覆盖。
const obj1 = { a: 1, b: 2 };
const obj2 = Object.assign({}, obj1);
console.log(obj2); // { a: 1, b: 2 }
- 扩展运算符
扩展运算符可以将一个对象的属性展开到另一个对象中,语法比 Object.assign 更加简洁易懂。
const obj1 = { a: 1, b: 2 };
const obj2 = { ...obj1 };
console.log(obj2); // { a: 1, b: 2 }
但是需要注意的是,这种方法只能进行浅拷贝,如果源对象中有嵌套的对象,则只会复制引用,而不会复制对象本身。
原文地址: https://www.cveoy.top/t/topic/mVo 著作权归作者所有。请勿转载和采集!