1.递归实现
递归实现是最基本的深拷贝方式,它遍历对象属性,若属性本身是引用类型,则继续递归拷贝。
function deepClone(obj) {
if (obj === null || typeof obj !== 'object') return obj;
const clone = Array.isArray(obj) ? [] : {};
for (let key in obj) {
clone[key] = deepClone(obj[key]);
}
return clone;
}
2.JSON实现
JSON.parse和JSON.stringify提供了深拷贝的功能,但只适用于支持序列化和反序列化的数据类型,如基本数据类型和部分对象类型。
function deepClone(obj) {
return JSON.parse(JSON.stringify(obj));
}
3.Object.assign实现
Object.assign也可以实现深拷贝,但只能复制可枚举属性,不能复制继承属性。
function deepClone(obj) {
return Object.assign({}, obj);
}
4.lodash实现
lodash是一款流行的JavaScript工具库,它提供了_.cloneDeep方法,可以实现深拷贝
const _ = require('lodash');
function deepClone(obj) {
return _.cloneDeep(obj);
}