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

电子商务网站建设外包服务怎样登录韵网网站

电子商务网站建设外包服务,怎样登录韵网网站,长沙房产信息网查询,上海网站建设的总结 实现深拷贝的方式有多种,选择应根据具体需求: 简单场景:使用 JSON.parse(JSON.stringify(obj))学习/教学:使用递归实现 循环引用处理生产环境:优先使用 lodash.cloneDeep浏览器端(现代)&a…

总结

实现深拷贝的方式有多种,选择应根据具体需求:

  • 简单场景:使用 JSON.parse(JSON.stringify(obj))
  • 学习/教学:使用递归实现 + 循环引用处理
  • 生产环境:优先使用 lodash.cloneDeep
  • 浏览器端(现代):使用 structuredClone

建议:在开发中优先使用成熟的库(如 lodash),避免重复造轮子。如需自定义实现,应考虑特殊类型、循环引用、性能等问题。


概述

在 JavaScript 中,深拷贝是指创建一个新对象,使其与原对象完全独立,互不影响。与之相对的是浅拷贝,只复制引用地址,原对象和新对象共享内部引用的数据。

深拷贝常用于:

  • 状态快照保存(如撤销/重做功能)
  • 数据隔离(避免修改原始数据)
  • 跨组件通信时的数据传递

一、常见的深拷贝方式

1. 使用 JSON.parse(JSON.stringify(obj))(简单但有局限)

原理:

将对象序列化为 JSON 字符串,再解析为新对象。

示例:
const obj = { a: 1, b: { c: 2 } };
const copy = JSON.parse(JSON.stringify(obj));copy.b.c = 3;
console.log(obj.b.c); // 2(原对象未被修改)
优点:
  • 简洁、无需额外代码
  • 支持大多数基础结构
缺点:
限制说明
不支持函数、undefined会被忽略
不支持循环引用会报错
不支持 Symbol 属性键会被忽略
日期对象会被转为字符串无法还原为 Date 对象
正则表达式等特殊对象也会丢失RegExp

2. 递归实现深拷贝(基础实现)

示例:
function deepClone(obj) {if (obj === null || typeof obj !== "object") return obj;const copy = Array.isArray(obj) ? [] : {};for (const key in obj) {if (obj.hasOwnProperty(key)) {copy[key] = deepClone(obj[key]);}}return copy;
}
优点:
  • 可以处理对象、数组
  • 可扩展性强
缺点:
  • 不处理循环引用会栈溢出
  • 无法复制函数、DateRegExp 等特殊对象

3. 使用第三方库(推荐)

(1) lodashcloneDeep
npm install lodash
import _ from "lodash";const obj = { a: 1, b: { c: 2 } };
const copy = _.cloneDeep(obj);
(2) structuredClone(浏览器原生 API,现代浏览器支持)
const obj = { a: 1, b: { c: 2 } };
const copy = structuredClone(obj);

✅ 支持:DateMapSetArrayBufferError
❌ 不支持:函数、undefined、某些循环引用


二、处理循环引用的深拷贝实现

function deepClone(obj, visited = new Map()) {if (obj === null || typeof obj !== "object") return obj;if (visited.has(obj)) {return visited.get(obj); // 防止循环引用}const copy = Array.isArray(obj) ? [] : {};visited.set(obj, copy);for (const key in obj) {if (obj.hasOwnProperty(key)) {copy[key] = deepClone(obj[key], visited);}}return copy;
}

三、不同深拷贝方式对比

方法支持类型循环引用函数支持日期支持正则支持性能推荐场景
JSON.parse✅ 对象/数组⭐⭐⭐⭐简单对象,无特殊类型
递归实现✅ 对象/数组❌(需手动处理)⭐⭐学习用途
lodash.cloneDeep✅ 多种类型⭐⭐⭐⭐⭐生产环境
structuredClone✅ 多种类型⭐⭐⭐⭐浏览器端
手动封装(带类型判断)✅ 自定义✅(可实现)✅(可实现)✅(可实现)✅(可实现)⭐⭐⭐定制化需求

四、深拷贝的注意事项

说明
循环引用必须使用 MapWeakMap 缓存已拷贝对象
特殊对象DateRegExpMapSet 需要单独处理
函数通常不需要拷贝,直接返回原引用即可
Symbol 类型键需要用 Reflect.ownKeys 获取
原型链上的属性通常不需要拷贝,除非特别要求
性能优化深拷贝可能影响性能,应避免频繁调用

http://www.dtcms.com/a/484472.html

相关文章:

  • 单页营销网站模板无锡app制作
  • seo蒙牛伊利企业网站专业性诊断成都小程序商城开发
  • 万户网站协作管理系统wordpress首页修改路径
  • 免费自助网站用户浏览网站的方式
  • 网站建设购物商城wordpress 咨询主题
  • WordPress强制更换主题佛山seo关键词
  • 如果做网站网站开发技术及特点
  • 齐齐哈尔哪里做网站外贸网站推广建设
  • 服务网站建设方案网络seo哈尔滨
  • 学网站建设语言资料管理系统
  • Bootstrap4 表格详解
  • 网站搜索不到公司网站凡科建站官网登录入口网页版
  • 创建网站app怎么注册中文域名
  • 织梦网站源文件没有style文件夹怎么修改网站背景wordpress 旅游足迹插件
  • 网站制作模板过程网页特效大全
  • 学校网站建设企业直播软件开发需要多少钱
  • 关于网站开发人员的薪资谢家华做网站
  • 基于springboot针对老年人的景区订票系统
  • 越秀区建网站公司如何做公司自己的网站
  • 网站建设网上商城心得体会九江市seo
  • 茂名做网站建设公司单页面网站有哪些内容
  • 京东联盟怎么做CMS网站wordpress国内博客主题
  • 公司网站在百度搜不到互联网
  • 公司网站的管理和维护电子商务平台是什么意思
  • 做网站的设计尺寸延吉网站开发公司
  • 制作一个网站数据库怎么做的深圳网页设计公司搜行者seo
  • 织梦个人网站模板永清县建设局 网站
  • 怎么运营小程序seo网站诊断价格
  • 南通网站设计大连百度推广优化
  • 从哪里设置网站关键词网站怎么做移动图片不显示