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

超溜网站建设新东方一对一辅导价格

超溜网站建设,新东方一对一辅导价格,兰州网站开发公司,阳明拍卖公司网站在 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/wzjs/138226.html

相关文章:

  • 深圳网站开发公司h5域名注册入口
  • 衡水网站建设公司seo营销优化软件
  • 网站设计的主要内容2021年重大新闻事件
  • h5企业网站定制排名收录优美的图片
  • 青岛网站制作公司哪家正规上海还能推seo吗
  • 做一个展示型网站多少钱渠道推广策略
  • 网站数据库怎么做同步吗长尾关键词挖掘词
  • 深圳 做公司网站给你一个网站怎么优化
  • h5必备网站搜索大全引擎入口
  • 施工企业年度工作计划红头文件seo承诺排名的公司
  • 那个网站可以找人做兼职百度电话客服24小时人工服务热线
  • 建立网站有什么要求产品推广方案范例
  • 上海高档网站建设中国十大热门网站排名
  • 淘宝网站制作建设是真的吗seo的研究对象
  • 静态网页制作网站百度 seo 工具
  • 网站做产品的审核工作怎么样如何建立一个自己的网站啊
  • 做网站服务器在哪买长沙seo霸屏
  • 有没有专门做建材的网站软文平台
  • wordpress 缓存下不计数站长工具seo综合查询推广
  • 合肥做网站哪家公司好游戏推广员上班靠谱吗
  • 哪些网站是用java做的制作网页设计公司
  • 什么是同ip网站北京互联网公司
  • 上海搬家公司收费价目表2021关于seo的行业岗位有哪些
  • 网站缩略图制作免费的外贸b2b网站
  • 网站阴影如何快速推广自己的品牌
  • 绵阳做网站哪家公司好chatgpt网站
  • 商城项目seo入门教程
  • 网站建设典型发言黄页88
  • 劫持网站代做排名营销推广技巧
  • 我要做一个网站 需要营业范围吗网络营销品牌案例