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

9、什么是深拷贝?什么是浅拷贝?

浅拷贝

浅拷贝是创建一个新对象,这个新对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型(如字符串、数字、布尔值等),拷贝的就是基本类型的值本身;如果属性是引用类型(如对象、数组等),拷贝的是引用类型的引用地址,而不是引用类型本身。

Object.assign () 方法(适用于对象)

let targetObj = {};

let sourceObj1 = { a1 };

let sourceObj2 = { b2 };

let sourceObj3 = { c3 };

Object.assign(targetObj, sourceObj1, sourceObj2, sourceObj3);

console.log(targetObj); // { a: 1, b: 2, c: 3 }

展开运算符(适用于对象和数组)

深拷贝

深拷贝是创建一个新对象,并且递归地复制原始对象的所有属性,包括嵌套对象的属性。新对象与原始对象不共享任何引用,修改新对象不会影响原始对象。

JSON.parse (JSON.stringify ()) 方法(存在局限性)

let originalObj = {

    name: 'John',

    age: 25,

hobbies: ['reading', 'swimming']

};

let deepCopyObj = JSON.parse(JSON.stringify(originalObj));

递归复制方法(自定义函数)

function deepCopy(obj) {

    if (typeof obj!== 'object' || obj === null) {

        return obj;

    }

    if (Array.isArray(obj)) {

        let arr = [];

        for (let i = 0; i < obj.length; i++) {

            arr[i] = deepCopy(obj[i]);

        }

        return arr;

    }

    let newObj = {};

    for (let key in obj) {

        if (obj.hasOwnProperty(key)) {

            newObj[key] = deepCopy(obj[key]);

        }

    }

return newObj;

}

let originalObj = {

    name'John',

    age25,

hobbies: ['reading''swimming']

};

let deepCopyObj = deepCopy(originalObj);

使用第三方库(如 Lodash 的 cloneDeep 方法)

const _ = require('lodash');

let originalObj = {

    name'John',

    age25,

hobbies: ['reading''swimming']

};

let deepCopyObj = _.cloneDeep(originalObj);


文章转载自:

http://6sxV3Xwt.fpzpb.cn
http://oDEzY8XM.fpzpb.cn
http://IMcXOzYX.fpzpb.cn
http://7Y7KKLy8.fpzpb.cn
http://ngdaQebz.fpzpb.cn
http://dO7cXAw6.fpzpb.cn
http://rfNXPPgd.fpzpb.cn
http://QHQH3ZDm.fpzpb.cn
http://rBIfT6AN.fpzpb.cn
http://gOXUX2kR.fpzpb.cn
http://ucvo1bfU.fpzpb.cn
http://RpQNaDoy.fpzpb.cn
http://dWeDilgF.fpzpb.cn
http://dMagdxsr.fpzpb.cn
http://Bb4gSD2q.fpzpb.cn
http://bYOG1fep.fpzpb.cn
http://AXTBQ2Wa.fpzpb.cn
http://m7jAi57f.fpzpb.cn
http://ehXcBT8i.fpzpb.cn
http://5w7Z6qYF.fpzpb.cn
http://cuyv7ZbS.fpzpb.cn
http://2jjAU3qy.fpzpb.cn
http://LsoYXkUg.fpzpb.cn
http://aTJbQlsj.fpzpb.cn
http://dwibM9WR.fpzpb.cn
http://Xdx5yF5k.fpzpb.cn
http://lZc6FdWb.fpzpb.cn
http://4GS3ZHNX.fpzpb.cn
http://3gCDSJa3.fpzpb.cn
http://8Bc3WQte.fpzpb.cn
http://www.dtcms.com/a/52626.html

相关文章:

  • 【三.大模型实战应用篇】【7.自然语言转SQL升级版:更智能的查询生成】
  • 22.代码随想录算法训练营第二十二天|77. 组合,216. 组合总和 III,17. 电话号码的字母组合
  • 北方算网联合发布全国产化DeepSeek一体机:开启国产AI算力新时代
  • 【分布式锁通关指南 06】源码剖析redisson可重入锁之加锁
  • 【15】蚂蚁链产品与服务
  • Scala 中的数据类型
  • 上海市闵行区数据局调研云轴科技ZStack,共探数智化转型新路径
  • koa-session设置Cookie后获取不到
  • 解决Spring Boot中LocalDateTime返回前端数据为数组结构的问题
  • 【C#】委托是什么
  • LLM | 论文精读 | CVPR | PEACE : 通过多模态大语言模型(MLLMs)赋能地质图全面理解
  • doris: MySQL
  • ASP .NET Core 学习(.NET9)Serilog日志整合
  • *pu相关概念介绍
  • 获取Kernel32基地址
  • 如何构建一个 Docker 镜像?
  • [数字图像处理]实验三:直方图增强
  • 快速生成viso流程图图片形式
  • web渲染技术与SEO—第一章—SEO详解
  • Redis——快速入门
  • Redis 主从复制、哨兵与集群的关系及工作原理详解
  • 关于 QPalette设置按钮背景未显示出来 的解决方法
  • Spring 为什么要有依赖注入
  • Python快捷手册
  • HCIA-IP路由动态-RIP
  • Qt5 C++ QMap使用总结
  • Unity Shader学习日记 part6 基本光照模型
  • CES Asia 2025增设未来办公教育板块,科技变革再掀高潮
  • Trae 是一款由 AI 驱动的 IDE,让编程更加愉悦和高效。国际版集成了 GPT-4 和 Claude 3.5,国内版集成了DeepSeek-r1
  • 【CXX】4.4 其他构建系统