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

可以做软件外包项目的网站谷歌外链工具

可以做软件外包项目的网站,谷歌外链工具,湖北孝感展示型网站建设价格,深圳做网站 创同盟前情提要 最近在调uni-app时,经常遇到需要深拷贝对象的情况,今天正好有空,给大家博主用到的深拷贝的方法。 最常用的序列化方法 这个是博主最常用的方法,也是个人认为最简洁方便的的,唯一的确定就是部分特殊类型会拷贝…

前情提要

最近在调uni-app时,经常遇到需要深拷贝对象的情况,今天正好有空,给大家博主用到的深拷贝的方法。

最常用的序列化方法

这个是博主最常用的方法,也是个人认为最简洁方便的的,唯一的确定就是部分特殊类型会拷贝失效,总结如下
优点: 简单快捷,兼容性好
缺点: 无法处理 undefined、function、Symbol 类型、Date 对象(转为 ISO 字符串)、正则表达式(转为空对象)

<html>
<style></style>
<body></body>
<script>const obj = { a:undefined, b:{b1:1}, c:'测试', d:new Date(), f:function(){} };const newObj = JSON.parse(JSON.stringify(obj));// 输出 {b:{b1: 1}, c:"测试", d:"2025-04-11T09:16:12.039Z"}console.log(newObj)
</script>
</html>

原生方法structuredClone

该方法是HTML5新推出,相比序列化方法,支持了更多数据类型,且更简便了,但是兼容性较差,总结如下
优点: 浏览器原生方法,支持更多数据类型(undefined、Date 对象等)
缺点: 不支持函数、DOM 节点等,且对兼容性有要求,需较新浏览器

<html>
<style></style>
<body></body>
<script>const obj = { a:undefined, b:{b1:1}, c:'测试', d:new Date() };const newObj = structuredClone(obj);// 输出 {a:undefined, b:{b1: 1}, c:"测试", d: Fri Apr 11 2025 17:19:31 GMT+0800 (中国标准时间)}console.log(newObj)
</script>
</html>

MessageChannel 异步拷贝

该方法是通过信道通信间的传输,来实现对象的深度拷贝,能处理大部分数据类型,唯一的缺点就是需要异步操作
优点: 能处理除了函数外的大部分数据类型
缺点: 需要异步操作,会增加代码的复杂性

<html>
<style></style>
<body></body>
<script>const obj = { a:undefined, b:{b1:1}, c:'测试', d:new Date() };function deepClone(obj) {return new Promise(resolve => {const { port1, port2 } = new MessageChannel()port2.onmessage = ev => resolve(ev.data)port1.postMessage(obj)})}deepClone(obj).then(newObj=>{// 输出 {a:undefined, b:{b1: 1}, c:"测试", d: Fri Apr 11 2025 17:19:31 GMT+0800 (中国标准时间)}console.log(newObj)})
</script>
</html>

自定义方法

最后一种就是我们自己写的方法了,具体总结如下
优点: 可自定义处理特殊类型
缺点: 需要手动处理各种数据类型(Date/RegExp/Map/Set等),性能较差(大数据量时)

<html>
<style></style>
<body></body>
<script>const obj = { a:undefined, b:{b1:1}, c:'测试', d:new Date() };function deepClone(obj, map = new WeakMap()) {if (obj === null || typeof obj !== 'object') return objif (map.has(obj)) return map.get(obj)let clone = Array.isArray(obj) ? [] : {}map.set(obj, clone)for (let key in obj) {if (obj.hasOwnProperty(key)) {clone[key] = deepClone(obj[key], map)}}return clone}const newObj = deepClone(obj);// 输出 {a:undefined, b:{b1: 1}, c:"测试", d: Fri Apr 11 2025 17:19:31 GMT+0800 (中国标准时间)}console.log(newObj)
</script>
</html>

总结

博主能力有限,基本就只能总结这四种了,大家也可以选择第三方库去实现对象之间的深拷贝,或者有什么其他方法都可评论讨论。

http://www.dtcms.com/wzjs/460018.html

相关文章:

  • 代练网站建设视频网络服务有限公司
  • 如何做好网站内容站长工具是什么意思
  • 个人网站建设流程seo关键词优化培训班
  • 自己建设网站的利弊网络seo优化推广
  • 互联网网站建设百度权重什么意思
  • 网站建设定义是什么意思东莞最新疫情
  • 厦门网站制作维护如何让自己的网站排名靠前
  • discuz可以做商城网站吗客源引流推广
  • 常州网站建设代理商十大计算机培训机构排名
  • 网络培训的建议网站优化排名资源
  • 网站在线制作系统市场调研报告怎么写
  • 大型网站 cms制作网页链接
  • 网站制作公司中企动力推荐百度极速版推广员怎么申请
  • 温州网站建设网络seo在线优化
  • 网站制作合作宁波seo优化项目
  • 嘉兴网站建设方案外包网站收录登录入口
  • web程序设计-asp.net网站开发一站式自媒体服务平台
  • 南皮做网站的sem和seo是什么职业岗位
  • 网站程序和空间区别自己怎么开电商平台
  • 永久免费制作网站青岛百度网站排名
  • 住房和城乡建设厅官方网站app开发公司有哪些
  • 房地产公司排行榜手机优化什么意思
  • 做电商的批发网站友情链接交换形式有哪些
  • 真空电镀技术支持 东莞网站建设百度指数的网址
  • 沈阳做网站直播的公司海外互联网推广平台
  • 区网站建设网站建立的步骤
  • 建立可以在线做照片的网站重庆网站建设公司
  • 动漫制作专业特色seo推广怎么做视频教程
  • 武汉市做网站的公司长沙优化排名推广
  • 绵阳远腾建设网站佛山做seo推广公司