😋可处理循环引用问题的深拷贝实现方式
00 分钟
2023-12-30
2024-5-18
type
status
date
slug
summary
category
password
tags
icon
😆
在JavaScript中,深拷贝(deep clone)是一项常见的需求,用于创建对象的完全独立副本。然而,处理包含循环引用的对象时,深拷贝会变得复杂。本文将介绍一种可以解决循环引用问题的深拷贝实现方式,并提供详细的代码示例。

深拷贝基础实现(不能处理循环引用)

首先,让我们回顾一下最基本的深拷贝实现:
这段代码通过递归遍历对象的每个属性来实现深拷贝。然而,这种实现无法处理循环引用的问题。例如,如果对象包含自引用或相互引用,会导致无限递归,从而抛出错误。
notion image

官方方法

JavaScript ES2022还引入了structuredClone方法,可以直接用于处理循环引用的深拷贝:

自定义实现

为了处理循环引用,我们可以使用WeakMap来跟踪已经访问过的对象。如果再次遇到相同的对象,我们可以直接返回其副本,避免无限递归。以下是改进后的实现:

测试

notion image
 
💡
欢迎您在底部评论区留言,一起交流~