当前位置: 首页 > 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/343315.html

相关文章:

  • 乐清做网站的公司有哪些爱站网关键词挖掘工具
  • 通州广州网站建设金花站长工具
  • 全屋定制家具品牌排行榜前十名免费seo优化
  • 做首页网站成品seo培训机构
  • 北京公司模板网站好昆山优化外包
  • 轻设计 让网站灵敏轻便的6个技巧西安网站建设公司排行榜
  • 电子商务网站建设与管理课后答案谷歌seo网站排名优化
  • 沈阳的网站制作公司google seo 优化招聘
  • 网站备案 做网站时就需要吗官方正版清理优化工具
  • 网站建设明细推广app的单子都在哪里接的
  • 微信网站开发平台今日新闻内容
  • 莆田专业网站建设公司一级消防工程师考试
  • 网页制作工具程seo关键词排名优化怎么收费
  • 国外网站开发现状网上推广平台
  • 微信小程序官网平台入口官网登录产品seo怎么优化
  • 网站建设如何做百度关键词搜索引擎
  • 怎样做国外电子商务网站seo收费标准多少
  • 苏州知名高端网站建设企业长沙网站优化体验
  • 分包合同建设局网站下载2023全民核酸又开始了
  • 深圳坂田网站建设如何写好一篇软文
  • 网站建设服务规划与措施网站权重查询接口
  • 做化妆品网站百度开户返点
  • 湛江 网站建设推广宣传方式有哪些
  • 可以做行程的网站2021小学生新闻摘抄
  • 石家庄网站建设模板服务黑帽seo是什么
  • 昆明网络建站公司seo前线
  • 仙桃网站建设线上推广策略
  • 网站推荐你懂我的意思吧知乎在百度怎么发广告做宣传
  • 什么网站做美式软装设计域名注册要多少钱
  • 网站 js 广告代码大全百度词条官网入口