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

皖icp备 网站建设许昌永诚网络科技有限公司

皖icp备 网站建设,许昌永诚网络科技有限公司,手机上如何开发软件,天水网站开发技术招聘在 JavaScript 中,深拷贝(Deep Copy) 和 浅拷贝(Shallow Copy) 是两种不同的对象复制方式,它们的区别主要体现在对嵌套对象的处理上。以下是它们的详细对比及使用场景: 1. 浅拷贝(Sh…

在 JavaScript 中,深拷贝(Deep Copy) 和 浅拷贝(Shallow Copy) 是两种不同的对象复制方式,它们的区别主要体现在对嵌套对象的处理上。以下是它们的详细对比及使用场景:


1. 浅拷贝(Shallow Copy)

  • 定义:

    • 浅拷贝只复制对象的第一层属性,如果属性是基本类型(如 stringnumberboolean),则直接复制值;如果属性是引用类型(如 objectarray),则复制引用(内存地址)。

    • 浅拷贝后的对象和原对象共享嵌套的引用类型数据。

  • 实现方式:

    • 使用 Object.assign():

      const obj = { a: 1, b: { c: 2 } };
      const shallowCopy = Object.assign({}, obj);
    • 使用扩展运算符(...):

      const obj = { a: 1, b: { c: 2 } };
      const shallowCopy = { ...obj };
  • 特点:

    • 修改浅拷贝对象的第一层属性不会影响原对象。

    • 修改浅拷贝对象的嵌套对象属性会影响原对象。

  • 示例:

    const obj = { a: 1, b: { c: 2 } };
    const shallowCopy = { ...obj };shallowCopy.a = 10; // 修改第一层属性
    shallowCopy.b.c = 20; // 修改嵌套对象属性console.log(obj); // { a: 1, b: { c: 20 } } (嵌套对象被修改)
    console.log(shallowCopy); // { a: 10, b: { c: 20 } }

2. 深拷贝(Deep Copy)

  • 定义:

    • 深拷贝会递归复制对象的所有层级属性,包括嵌套的引用类型数据。

    • 深拷贝后的对象和原对象完全独立,互不影响。

  • 实现方式:

    • 使用 JSON.parse(JSON.stringify()):

      const obj = { a: 1, b: { c: 2 } };
      const deepCopy = JSON.parse(JSON.stringify(obj));
      • 注意:这种方法无法复制函数、undefinedSymbol 等特殊类型。

    • 使用递归函数或工具库(如 Lodash 的 _.cloneDeep):

      const _ = require('lodash');
      const obj = { a: 1, b: { c: 2 } };
      const deepCopy = _.cloneDeep(obj);
  • 特点:

    • 修改深拷贝对象的任何属性都不会影响原对象。

    • 深拷贝会完全复制对象的所有层级数据。

  • 示例:

    const obj = { a: 1, b: { c: 2 } };
    const deepCopy = JSON.parse(JSON.stringify(obj));deepCopy.a = 10; // 修改第一层属性
    deepCopy.b.c = 20; // 修改嵌套对象属性console.log(obj); // { a: 1, b: { c: 2 } } (原对象不受影响)
    console.log(deepCopy); // { a: 10, b: { c: 20 } }

3. 浅拷贝和深拷贝的区别

特性浅拷贝(Shallow Copy)深拷贝(Deep Copy)
复制层级只复制第一层属性递归复制所有层级属性
嵌套对象嵌套对象是引用(共享内存地址)嵌套对象是独立的(不共享内存地址)
性能性能较高性能较低(递归复制)
实现方式Object.assign()、扩展运算符JSON.parse(JSON.stringify())、递归函数、工具库
适用场景对象结构简单,无需复制嵌套对象对象结构复杂,需要完全独立的对象

4. 如何选择使用浅拷贝和深拷贝

  • 使用浅拷贝的场景:

    • 对象结构简单,没有嵌套对象或数组。

    • 只需要复制第一层属性,且不关心嵌套对象是否共享。

    • 性能要求较高,且不需要完全独立的对象。

  • 使用深拷贝的场景:

    • 对象结构复杂,包含嵌套对象或数组。

    • 需要完全独立的对象,修改拷贝对象不影响原对象。

    • 不关心性能开销,且需要完整的复制。


5. 总结

  • 浅拷贝:

    • 只复制第一层属性,嵌套对象是引用。

    • 适合简单对象或性能敏感的场景。

  • 深拷贝:

    • 递归复制所有层级属性,嵌套对象是独立的。

    • 适合复杂对象或需要完全独立的场景。

根据实际需求选择合适的拷贝方式,可以避免不必要的性能开销和潜在的错误。

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

相关文章:

  • 开一家网站建设公司音乐网站开发与设计
  • youku网站开发技术凡科建站代理入口
  • 锡盟建设局网站注销备案号 网站
  • 国外ui设计网站普洱建设工程网站
  • 电子商务网站的后台管理系统长沙电子商务公司网站制作
  • 网站 数据库 关系新媒体运营面试问题
  • 驻马店百牛网站建设网站开发需要的编程软件有哪些
  • 济南营销网站建设价格Wordpress如何加联盟广告
  • 网站优化推广是什么网络营销方式有哪些免费
  • 阿里云服务器上做淘宝客网站网站开发技术现状
  • 99元一月做网站营销背景包括哪些内容
  • 哪家公司做网站不错oppo应用商店下载
  • 六安做网站微商城分销系统多少钱
  • 做行程的网站 哪个最好流媒体网站开发
  • 教师网络培训心得体会网站建站与优化
  • vs2017 做网站FileZilla做网站
  • 电商网站建设方案100例淘宝网(淘宝网)
  • 重庆手机网站制作wordpress 快讯模板
  • 机票便宜网站建设那些网站是asp做的
  • 镇江 网站建设企业vi怎么设计
  • 哈尔滨企业网站建设公司PHP企业网站开发实践
  • 网站建设设计费用摊销年限o2o平台的基本信息
  • 仿素材网站源码网站建设招标书模板
  • 做高仿包的能做网站吗如何选择模板网站建设
  • 建设网站的目的服装类传媒公司是干嘛的
  • 长沙河西网站建设网站申请腾讯绿标认证
  • 做家教用什么网站电商运营推广计划方案
  • 如何影响网站排名商业空间设计文案
  • 怎么建设淘客自己的网站WordPress情侣博客模板
  • 快速建立网站绍兴微网站建设