// 深拷贝方法示例
// 方法一:使用 JSON.parse 和 JSON.stringify(简单对象)
function deepClone(obj) {
return JSON.parse(JSON.stringify(obj));
}
// 解释:这种方法适用于简单的对象或数组,但对于包含函数、undefined、Infinity、Symbol、Date 等特殊类型的对象,可能会出现问题。
// 方法二:递归实现深拷贝
function deepCloneRecursive(obj, hash = new WeakMap()) {
if (obj === null || typeof obj !== 'object') {
return obj;
}
if (obj instanceof Date) {
return new Date(obj);
}
if (obj instanceof RegExp) {
return new RegExp(obj);
}
if (hash.has(obj)) {
return hash.get(obj);
}
const clonedObj = Array.isArray(obj) ? [] : {};
hash.set(obj, clonedObj);
for (let key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
clonedObj[key] = deepCloneRecursive(obj[key], hash);
}
}
return clonedObj;
}
// 解释:这种方法通过递归遍历对象的每个属性,并为每个对象创建一个新的实例,确保不会共享引用。它还处理了循环引用的问题。
上一篇:js const用法
下一篇:js 对象深拷贝
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站