当前位置: 首页 > news >正文

JS自定义深浅度克隆

function deepClone(obj, cache = new WeakMap()) {if (typeof obj !== 'object') return obj //普通类型,直接返回if (obj === null) return objif (cache.get(obj)) return cache.get(obj)//防止循环引用,程序进入死循环if (obj instanceof Date) return new Date(obj)//返回时间格式if (obj instanceof RegExp) return new RegExp(obj)//返回正则if (typeof obj === 'symbol') return Symbol(obj.description)	// 处理 Symbol//找到所属原型上的constructor,所属原型上的constructor指向点前对象的构造函数let cloneObj = new obj.constructor()// console.log(cloneObj)cache.set(obj, cloneObj)//缓存拷贝的对象,用于处理循环引用的情况for (let key in obj) {//hasOwnProperty() 方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性(也就是,是否有指定的键)。if (obj.hasOwnProperty(key)) {// console.log(key)cloneObj[key] = deepClone(obj[key], cache)//递归拷贝}}return cloneObj}//测试const obj = { name: 'Jack', address: { x: 100, y: 200 }, a: [1, 2, 3, 4], b: Symbol('22') }obj.a = obj//循环引用,会一直嵌套const newObj = deepClone(obj)console.log('obj', obj)console.log('newObj', newObj) 
http://www.lryc.cn/news/220046.html

相关文章:

  • MySQL之表的约束
  • Go基础——接口、并发
  • zookeeper本地部署和集群搭建
  • 优橙内推甘肃专场——5G网络优化(中高级)工程师
  • crontab 定时任务
  • 【入门Flink】- 03Flink部署
  • DockerFile常用保留字指令及知识点合集
  • 怎么批量删除文件名中的空格?
  • 回顾十大数据恢复软件,帮助用于恢复丢失的文件!
  • 【Linux】多路IO复用技术②——poll详解如何使用poll模型实现简易的一对多服务器(附图解与代码实现)
  • CSS 滚动捕获 Scroll Snap
  • 【带头学C++】----- 三、指针章 ---- 3.9 数组作为函数的参数
  • 完美处理 Android App 的 apk 输出路径与文件名
  • 【技术干货】开源库 Com.Gitusme.Net.Extensiones.Core 的使用
  • 大厂面试题-b树和b+树的理解
  • NeRF-SLAM部署运行(3060Ti)
  • 零基础编程入门教程软件推荐,零基础编程自学
  • Amazon EC2 安全可调用的云虚拟主机服务器
  • HTTP/HTTPS、SSL/TLS、WS/WSS 都是什么?
  • 软考之系统安全理论基础+例题
  • 棱镜七彩亮相工控中国大会,以软件供应链安全助力新型工业化高质量发展
  • 数据可视化:动态柱状图
  • vue3 自定义loading
  • Ceph-deploy跳过gpg-key验证(离线环境安装Ceph)
  • 想入行单片机开发的学生们的忠告
  • 【番外篇】C++语法学习笔记
  • js 字符串转数字
  • 【NI-DAQmx入门】外部采样时钟相关
  • Amazon EC2 Hpc7g 实例现已在更多区域推出
  • 【开题报告】基于SpringBoot的药店药品管理系统的设计与实现