首页 > 其他分享 >浅拷贝和深拷贝的区别是什么?如何代码实现深拷贝?

浅拷贝和深拷贝的区别是什么?如何代码实现深拷贝?

时间:2024-09-10 20:52:34浏览次数:1  
标签:区别 对象 代码 JSON new 拷贝 original 属性

  1. 浅拷贝(Shallow Copy):

    • 浅拷贝创建一个新对象,但是这个新对象的属性值是指向原始对象属性值的引用。
    • 对于对象属性是基本数据类型的,浅拷贝会复制其值。
    • 对于对象属性是对象(或数组)的,浅拷贝只复制引用,而不复制对象本身。
  2. 深拷贝(Deep Copy):

    • 深拷贝创建一个新对象,并且递归地复制所有子对象的属性。
    • 深拷贝确保原始对象和新对象之间没有任何引用关联,修改新对象不会影响原始对象。

如何实现深拷贝

使用 JSON.parse(JSON.stringify(obj)) 有局限性 很多类型不支持



const original = {
  a: 1,
  b: [1, 2, 3],
  c: { d: 4 },
  e: new Date(),
  f: /a/gi,
  g: new Set([1, 2, 3]),
  h: new Map([['a', 1], ['b', 2]]),
  i: new Error('error'),
  j: null,
  k: undefined,
  l: BigInt(1)
};

const deepCopied = JSON.parse(JSON.stringify(original));

使用  structuredClone(obj)

const deepCopieds = structuredClone(original);
// 测试
original.b.push(4);
original.c.d = 5;

  console.log("Original:", original);   console.log("deepCopied:",deepCopied);   console.log("deepCopieds:", deepCopieds);

 

标签:区别,对象,代码,JSON,new,拷贝,original,属性
From: https://www.cnblogs.com/yxdlm/p/18407174

相关文章

  • Windows远程桌面授权远程代码执行漏洞CVE-2024-38077(POC、EXP)
    目录漏洞描述关键信息漏洞影响漏洞危害等级影响范围漏洞解决方案临时缓解方案升级修复方案POCEXP使用参考漏洞描述CVE-2024-38077是Windows远程桌面授权服务(RDL)中的一个堆溢出漏洞。该漏洞在解码用户输入的许可密钥包时,未正确验证解码后的数据长度与缓冲区......
  • 代码随想录训练营day41|121. 买卖股票的最佳时机,122.买卖股票的最佳时机II,123.买卖股
    121.买卖股票的最佳时机这题和贪心中的买股票很想,但这里不用考虑局部问题,因为只用买一张卖一张。我想可以用一个数组dp来记录买入价格和卖出价格。然后遍历数组草我感觉我写的想贪心。动态规划dp[i][0]表示第i天不持股的最大收益,dp[i][1]表示第i天持股的最大收益。dp......
  • 0基础开始Pine量化 多重时间框架EMA+Supertrend策略(附代码)
    0基础开始Pine量化多重时间框架EMA+Supertrend策略(附代码)基于金叉动量捕捉策略:多重时间框架指数移动平均线交叉系统和三重超级趋势交叉策略在发明者量化网站上回测试验啥是EMA(指数移动平均线)EMA(ExponentialMovingAverage)是一种用于金融市场技术分析的趋势跟踪指标。与简......
  • opencv学习:模板匹配和argparse 模块的代码实现及优缺点
    模板匹配模板匹配算法(TemplateMatchingAlgorithm),这是一种在图像处理和计算机视觉领域常用的方法,用于在一个大图像中寻找一个小模板图像的位置。模板匹配算法通过滑动窗口的方式在目标图像上移动模板图像,并计算模板图像与目标图像的局部区域之间的相似度。算法步骤读取图......
  • pyarmor一个保护 Python代码的库!
    大家好,今天为大家分享一个超级厉害的Python库-pyarmor。 Python是一种广泛使用的高级编程语言,但其源代码往往容易被反编译或盗用,这对于一些商业软件或关键代码的保护构成了挑战。PyArmor是一个专门用于保护Python代码的工具,它可以对Python脚本进行加密、混淆和授权......
  • String Builder 与 StringBuffer 的区别 ----面试时遇到的一个问题
    简介:在Java中,StringBuilder和StringBuffer都是用于操作字符串的类,它们提供了类似于字符串的功能,但允许在运行时修改字符串的内容。这两个类的主要区别在于线程安全性。StringBuilderStringBuilder是一个非线程安全的类,它在Java5中引入。由于它没有线程安全的限......
  • Goby 漏洞发布|(CVE-2024-45195)Apache OFBiz /viewdatafile 代码执行漏洞【已复现】
    漏洞名称:ApacheOFBiz/viewdatafile代码执行漏洞(CVE-2024-45195)EnglishName:ApacheOFBiz/viewdatafileCodeExecutionVulnerability(CVE-2024-45195)CVSScore: 8.0漏洞描述:ApacheOFBiz是一个开源企业资源规划(ERP)系统。它提供了一套企业应用程序,集成并自动化企业的......
  • 陶瓷电容代码含义
    NPO与X7R、X5R、Y5V、Z5U等不同代码的电容有什么区别?主要是介质材料不同。不同介质种类由于它的主要极化类型不一样,其对电场变化的响应速度和极化率亦不一样。在相同的体积下的容量就不同,随之带来的电容器的介质损耗、容量稳定性等也就不同。介质材料划按容量的温度稳定性可以分......
  • useEffect和useLayoutEffect的区别
    它们两个的区别主要是执行时机的不一样,要理解执行时机。首先我们来了解下浏览器的执行流程,dom树和cssom树合并为render树之后,后面的流程概括来说就是layout布局,和paint(绘制,就把最后布局好的树画在屏幕视图上)。这里直接揭晓答案,useLayoutEffect是在layout之后,paint之前执行的。而u......
  • AI直播带货未来需要的功能及代码!
    在数字化转型的浪潮中,AI直播带货已成为电商领域的一股不可忽视的力量,它不仅重塑了消费者的购物体验,还极大地提升了销售效率。那么,AI直播带货在未来会需要哪些新的功能?这些功能又将如何通过代码实现呢?本文将带您一探究竟。1、智能商品推荐系统功能描述:基于用户的购买历史、浏览行......