JavaScript 深拷贝实现方法:处理函数、null和循环引用 - 完整指南
实现一个深拷贝函数可以使用以下方法:
- 使用
JSON.stringify()将对象转换为JSON字符串。 - 使用
JSON.parse()将JSON字符串转换回对象。
function deepCopy(obj) {
return JSON.parse(JSON.stringify(obj));
}
然而,这种方法有一些限制:
- 无法复制函数、正则表达式等特殊对象。
- 无法处理循环引用,即对象之间相互引用的情况。
如果需要处理上述情况,可以使用递归进行深拷贝。
function deepCopy(obj) {
// 检查是否为特殊对象
if (typeof obj === 'function' || obj === null) {
return obj;
}
// 创建新对象
let copy = Array.isArray(obj) ? [] : {};
// 递归复制属性值
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
copy[key] = deepCopy(obj[key]);
}
}
return copy;
}
这样的实现能够处理函数、null等特殊对象,并且可以处理循环引用的情况。
原文地址: http://www.cveoy.top/t/topic/qeH0 著作权归作者所有。请勿转载和采集!