type
status
date
slug
summary
category
password
tags
icon
在JavaScript中,深拷贝(deep clone)是一项常见的需求,用于创建对象的完全独立副本。然而,处理包含循环引用的对象时,深拷贝会变得复杂。本文将介绍一种可以解决循环引用问题的深拷贝实现方式,并提供详细的代码示例。
深拷贝基础实现(不能处理循环引用)
首先,让我们回顾一下最基本的深拷贝实现:
这段代码通过递归遍历对象的每个属性来实现深拷贝。然而,这种实现无法处理循环引用的问题。例如,如果对象包含自引用或相互引用,会导致无限递归,从而抛出错误。
官方方法
JavaScript ES2022还引入了
structuredClone
方法,可以直接用于处理循环引用的深拷贝:
自定义实现
为了处理循环引用,我们可以使用
WeakMap
来跟踪已经访问过的对象。如果再次遇到相同的对象,我们可以直接返回其副本,避免无限递归。以下是改进后的实现:
测试
欢迎您在底部评论区留言,一起交流~
- 作者:NotionNext
- 链接:https://lsnx.top/article/deepclone
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。