JavaScript深拷贝需解决循环引用和特殊类型处理两大问题:用WeakMap检测循环引用,对Date、RegExp、Map、Set等特殊类型显式构造,并通过getPrototypeOf、getOwnPropertyDescriptors等API还原原型链与不可枚举属性。JavaScript深拷贝遇到循环引用会直接报错,特殊类型(如Date、RegExp、Map、Set、Function等)若不单独处理,拷贝结果往往失真或丢失。解决这两个问题需要自定义逻辑,不能只靠JSON.parse(JSON.stringify())或简单递归。检测并跳过循环引用核心思路是记录已遍历过的对象及其对应的新对象,在递归过程中查表:若当前对象已被处理过,就直接返回对应的新对象,避免无限递归。用WeakMap存储原始对象 → 拷贝后对象的映射(WeakMap适合避免内存泄漏) 每次进入对象前先查表,命中则返回缓存结果 未命中则新建对象,立即存入WeakMap,再递归处理属性逐类识别与构造特殊类型Object和Array只是基础,Date、RegExp、Map、Set、TypedArray、Error、Promise等都有独立的构造方式和内部属性,需显式判断并还原。Date:用new Date(obj.getTime())或new Date(obj.toString()) RegExp:用new RegExp(obj.source, obj.flags)(注意global/unicode等标志) Map/Set:新建实例,遍历obj.entries()或obj.values()逐项拷贝键值 TypedArray:用obj.constructor.from(obj)或new obj.constructor(obj) Function:通常不拷贝(保留原引用),若需“复制”,只能字符串化+eval(不推荐)或明确业务场景处理保持原型链与不可枚举属性单纯用Object.assign或展开运算符会丢失原型和不可枚举属性(如Object.defineProperty定义的)。可靠做法是: 跃问 跃问是由阶跃星辰开发的免费AI智能问答助手,随时帮你智能搜索、高效阅读、识图理解、和你畅聊感兴趣的话题。
JavaScript中处理深拷贝中的循环引用与特殊类型
张小明
前端开发工程师
算力浪费率高达68%?AI原生研发效能诊断清单,含12项必检指标与自动巡检脚本
第一章:AI原生软件研发成本优化实战技巧 2026奇点智能技术大会(https://ml-summit.org) AI原生软件的研发成本常被模型训练开销主导,但实际可观测的浪费更多发生在推理服务、资源编排与持续集成环节。聚焦于“单位有效推理请求的综合成本”(…
QGroundControl 4.0地面站新手入门:从零开始规划你的第一次无人机任务
QGroundControl 4.0地面站新手入门:从零开始规划你的第一次无人机任务 第一次接触无人机地面站软件时,那种既兴奋又忐忑的心情我至今记忆犹新。QGroundControl作为开源无人机生态中最受欢迎的地面控制站之一,其4.0版本在用户体验和功能完整性…
Vmvare 虚拟机安装 Linux CentOS 7 操作系统 一键安装 Docker 1Panel 一键安装 MySQL Redis OpenClaw
Vmvare 虚拟机安装 Linux CentOS 7 操作系统 安装 Docker 1Panel Redis Mysql 1、Vmvare 创建虚拟机 2、安装 CentOS 7 https://developer.aliyun.com/mirror/?spma2c6h.25603864.0.0.39273b95mrpC7v https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/?spma2c6h.25…
技术深度解析:BaiduPCS-Go命令行工具的高效云存储管理技术解决方案
技术深度解析:BaiduPCS-Go命令行工具的高效云存储管理技术解决方案 【免费下载链接】BaiduPCS-Go iikira/BaiduPCS-Go原版基础上集成了分享链接/秒传链接转存功能 项目地址: https://gitcode.com/GitHub_Trending/ba/BaiduPCS-Go BaiduPCS-Go是一款基于Go语言…
臻识车牌识别相机时间与管理工具
温馨提示:文末有联系方式功能定位:精准管控生命周期 臻识车牌识别相机时间与管理工具,核心聚焦于设备使用周期的智能约束与安全加固,确保软硬件协同运行始终处于可控状态。欠款防控机制:按需设定有效使用期限 系统支持…
双指针,数组去重
一、核心原理慢指针(i):指向去重后新数组的最后一个有效位置。快指针(j):遍历整个原数组,寻找新的不重复元素。规则:找到不重复元素 → 赋值给慢指针的下一位,慢指针前进…