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

男直接做的视频网站三年抗疫国库空虚殆尽

男直接做的视频网站,三年抗疫国库空虚殆尽,租房网站开发文献综述模板,网站开发工程师课程个人博客:haichenyi.com。感谢关注 一. 目录 一–目录二–核心区别三–内存结构对比四–实现方式对比五–使用场景六–循环引用问题七–总结 二. 核心区别 深拷贝(Deep Copy)和浅拷贝(Shallow Copy)是对象复制的…

个人博客:haichenyi.com。感谢关注

一. 目录

  • 一–目录
  • 二–核心区别
  • 三–内存结构对比
  • 四–实现方式对比
  • 五–使用场景
  • 六–循环引用问题
  • 七–总结

二. 核心区别

深拷贝(Deep Copy)和浅拷贝(Shallow Copy)是对象复制的两种核心策略,它们的核心区别在于 ​对嵌套对象的处理方式。

特性浅拷贝深拷贝
复制层级仅复制对象的第一层属性递归复制对象的所有层级属性
内存引用嵌套对象(如数组,对象)与原对象共享内存地址嵌套对象与原对象完全独立,无内存共享
修改影响修改拷贝后的嵌套对象会影响原对象修改拷贝后的对象不会影响元对象
性能快(仅复制第一层)慢(递归所有层级)
适用场景简单对象(无嵌套引用类型)复杂对象(嵌套对象数组函数等)

三. 内存结构对比

  1. 浅拷贝示例
const original = { a: 1, b: { c: 2 } };
const shallowCopy = { ...original };
console.log("original ",original )
console.log("shallowCopy ",shallowCopy )
// 内存结构:
// original ──> { a: 1, b: ⬤ }
//                          ↓
// shallowCopy ─> { a: 1, b: ⬤ } 
//                          ⬤ 指向同一内存地址

浅拷贝对象
上面是浅拷贝之后对象的结构,为什么说里面的b对象是指向的相同的内存地址呢?也就是**核心区别里面的第二条:内存引用。**怎么证明这一点呢?我们修改其中一个对象b.c的值,另一个对象b.c的值也跟着改变,就证明了我这个观点
修改值,跟着变
2. 深拷贝示例

const original = { a: 1, b: { c: 2 } };
const deepCopy = JSON.parse(JSON.stringify(original));// 内存结构:
// original ──> { a: 1, b: ⬤ } 
//                          ↓
// deepCopy ──> { a: 1, b: ⬤ } 
//                          ↓
//                          { c: 2 } (全新内存地址)

同样的方式验证深拷贝。
深拷贝的结果

四. 实现方式对比

  1. 浅拷贝的实现
//展开运算符(...)​:
const obj = { a: 1, b: { c: 2 } };
const copy = { ...obj };
//Object.assign()
const copy = Object.assign({}, obj);
//数组浅拷贝
const arr = [1, [2, 3]];
const copy = arr.slice(); // 或 [...arr]
  1. 深拷贝的实现
//​JSON方法(局限性大)​:
const copy = JSON.parse(JSON.stringify(obj));
//缺点:无法处理函数、undefined、循环引用、Date对象等。
//递归实现:
function deepClone(obj, hash = new WeakMap()) {if (obj === null || typeof obj !== "object") return obj;if (hash.has(obj)) return hash.get(obj); // 处理循环引用const clone = new obj.constructor();hash.set(obj, clone);for (const key in obj) {if (obj.hasOwnProperty(key)) {clone[key] = deepClone(obj[key], hash);}}return clone;
}
//第三方库(推荐)​:lodash
import _ from "lodash";
const copy = _.cloneDeep(obj);

五. 使用场景

  1. 浅拷贝适用场景
    • 对象属性均为原始类型(number、string、boolean等)。
    • 明确知道嵌套对象需要共享修改(如状态管理中的共享配置)。
  2. 深拷贝适用场景
    • 需要完全独立的对象副本(如撤销/重做功能)。
    • 嵌套对象需要隔离修改(如表单数据提交前脱敏处理)。
    • 复杂对象(包含Date、RegExp、Map等特殊对象)。

六. 循环引用问题

  1. 浅拷贝:无循环引用问题,因为仅复制第一层。
  2. 深拷贝:递归深拷贝时需处理循环引用,否则会栈溢出:
const obj = { a: 1 };
obj.self = obj; // 循环引用
const copy = deepClone(obj); // 需正确处理循环引用

七. 总结

维度浅拷贝深拷贝
独立性部分独立(仅顶层属性独立)完全独立
内存占用低(共享嵌套对象)高(完全独立副本)
开发成本低(原生支持)高(需处理循环引用,特殊对象)
适用性简单数据复杂数据

选择原则:

  • 优先使用浅拷贝,除非明确需要深拷贝。
  • 深拷贝应谨慎用于大型对象(性能敏感场景)。

深拷贝的简单实现,仅供参考

function deepClone(target, hash = new WeakMap()) {// 处理非对象和null的情况(原始类型直接返回)if (target === null || typeof target !== 'object') {return target;}// 处理循环引用if (hash.has(target)) {return hash.get(target);}// 处理Date对象if (target instanceof Date) {return new Date(target);}// 处理RegExp对象if (target instanceof RegExp) {return new RegExp(target);}// 处理Map对象if (target instanceof Map) {const cloneMap = new Map();hash.set(target, cloneMap);target.forEach((value, key) => {cloneMap.set(deepClone(key, hash), deepClone(value, hash));});return cloneMap;}// 处理Set对象if (target instanceof Set) {const cloneSet = new Set();hash.set(target, cloneSet);target.forEach(value => {cloneSet.add(deepClone(value, hash));});return cloneSet;}// 处理数组和普通对象const cloneObj = new target.constructor();hash.set(target, cloneObj);// 递归拷贝所有属性(包括Symbol属性和不可枚举属性)Reflect.ownKeys(target).forEach(key => {cloneObj[key] = deepClone(target[key], hash);});return cloneObj;
}

文章转载自:

http://xltuYltL.zqdhr.cn
http://0JGM4d3h.zqdhr.cn
http://BoxXbYVg.zqdhr.cn
http://oLGFJwfU.zqdhr.cn
http://H2PATBTc.zqdhr.cn
http://vj5nrriP.zqdhr.cn
http://QtdFo0zn.zqdhr.cn
http://m8ASMtPa.zqdhr.cn
http://60BDydw4.zqdhr.cn
http://5PnAjU4h.zqdhr.cn
http://KEm8LelI.zqdhr.cn
http://k55Gadnl.zqdhr.cn
http://A83UWaua.zqdhr.cn
http://CaDEDKWq.zqdhr.cn
http://Ly48Tq8J.zqdhr.cn
http://4RsREzqz.zqdhr.cn
http://EvR6Fl8V.zqdhr.cn
http://LHxnIJ8W.zqdhr.cn
http://9s1323zS.zqdhr.cn
http://JlKQP1m5.zqdhr.cn
http://Hvj8jJYS.zqdhr.cn
http://6L7Mdf2H.zqdhr.cn
http://zBDKiJlA.zqdhr.cn
http://fxEE4UVl.zqdhr.cn
http://c25StPcw.zqdhr.cn
http://VFcQt7hf.zqdhr.cn
http://ofSo5TQP.zqdhr.cn
http://1pR797te.zqdhr.cn
http://9O6By5SB.zqdhr.cn
http://XePkr8vr.zqdhr.cn
http://www.dtcms.com/wzjs/746020.html

相关文章:

  • 山东网站建设和游戏开发的公司中国做室内设计的网站
  • 万网公司注册网站同和网站建设
  • 建设网站都需投入哪些资源网站建设及维护涉及哪些内容
  • 苏州建设网站哪家好福田网站制作报价
  • 免费手机做网站怎么增加网站的反链
  • 做帖子的网站有哪些wordpress本站主题
  • 北京做网站的开发公司网站开发是做什么?
  • 怎么学习网站建设wordpress设为首页
  • 搬瓦工putty做网站dw不会写代码能建立网站吗
  • 网站托管好吗郴州网站制作公司有哪些
  • 网站编程教学福州seo顾问
  • 网站开发工程师的经验wordpress淘宝客建站
  • 服装 网站模板 wordpress网站备案注销流程
  • 上传网站数据库吗做网站需要的技术
  • 如何设计网站做网站用什么软件医院双语网站建设的意义
  • 高端的网站推广网站建设 语言
  • 莘县建设局网站百青藤广告联盟官网
  • 手机网站建设经典教程wordpress熊掌号展示
  • 成交型网站建设wordpress增加产品
  • 多语言网站怎么做个别网站网速慢怎么做
  • 中高端社交网站建设服务商如何不花钱建设网站
  • 安徽网站设计网站建设包括哪些部分
  • 做网站和游戏是如何赚钱北京注册工作室代理公司
  • 旅游网站制作 价格wordpress 登陆 插件
  • 学做网站论坛vip账号破解室内装饰设计公司
  • 免费做店招的网站什么是企业网站营销
  • 自己做网站流程用网站做成软件
  • 新余网站建设人员dede 汽车网站模板
  • 科技网站建设的调研集团门户网站建设
  • 专业营销网站wordpress图片cdn