[前端]深浅拷贝
一、回顾变量类型
基础类型
boolean(bool)
number
string
null
undefined
引用类型
object
function
array
基本类型与引用类型的存储
基本类型一般存储在 栈 (栈小)
- 栈一旦确认 大小就固定 可能会造成溢出
- 栈一般是先进后出
- 用于存储基础类型以及引用类型的堆地址
- 运行速度快
引用类型一般存储在 堆(堆大)
- 堆大小不确认 可以扩展
- 不允许js直接操作堆数据
- 无序存储
- 由于其大小不固定 顺序不固定 导致 速度慢
堆栈示意图

栈内容当程序运行完毕 栈就空了
但是堆内容不见的一定就空 可能会出现 没有任何指针指向堆内容 导致都变成垃圾
所以我们需要手动指向 null让其销毁
二、深浅拷贝
深浅拷贝分两种情况 引用类型 基础类型
基础类型都是深拷贝
引用类型 大多数是浅拷贝 也可以变成深拷贝
深拷贝 地址不同 一个改变另一个并不跟随发生变化就是深拷贝 拷贝内容 地址不同
浅拷贝 地址相同 一个改变另一个随之改变 就是浅拷贝 拷贝的是地址
深拷贝let a = 10;let b = a;console.log(1,a,b,a===b);a = 88;console.log(2,a,b,a===b);console.log("======================");浅拷贝let obj1 = {n : 88}let obj2 = obj1;console.log(1,obj1,obj2,obj1===obj2);obj1.a = 99;console.log(2,obj1,obj2,obj1===obj2);
实现深拷贝 array object1.JSON.stringify JSON.parselet obj1 = {n : 88}let obj2 = JSON.parse(JSON.stringify(obj1)); //深拷贝console.log(1,obj1,obj2,obj1===obj2);obj1.a = 99;console.log(2,obj1,obj2,obj1===obj2);2. ... 解构let arr1 = [1,5,6,7];let arr2 = [...arr1];console.log(1,arr1,arr2,arr1===arr2);arr1[0] = "222"console.log(2,arr1,arr2,arr1===arr2);
// 伪拷贝 一般情况下是 第一层深拷贝 后面层浅拷贝let arr1 = [1,2,3,[6,7,8]];let arr2 = arr1.slice();console.log(1,arr1,arr2,arr1 === arr2);arr1[0] = 180;arr1[3][0] = 666;console.log(2,arr1,arr2,arr1 === arr2);let arr1 = [1,2,3,[6,7,8]];let arr2 = arr1.concat();console.log(1,arr1,arr2,arr1 === arr2);arr1[0] = 180;arr1[3][0] = 666;console.log(2,arr1,arr2,arr1 === arr2);
let menu1 = {menu: "菜单",item:{type: "menu",name: "子菜单"}}// Object.assign(目标,源)let menu2 = Object.assign({},menu1)console.log(1,menu1,menu2,menu1 === menu2);menu1.menu = "编辑"menu1.item.name = "保存"console.log(2,menu1,menu2,menu1 === menu2);
想要解决真正意义上的拷贝咋办
扁平化 嵌套的多层想办法给他变成地扁平化 递归思想
递归思想
普通的 按正常处理
深度的(引用类型 )按递归处理 直到没有引用类型为止··
let woniu = {name: "张三",age: 8,school: [{id: 1,name: "清华校区"},{id: 2,name: "北大校区"},{id: 3,name: "上交校区"},{id: 4,name: "国科大校区"}],subject: {web: "web前端",java: "java后端",python: "python",ui: "设计"}}function copyData(source) {// 定义一个容器 容器需要根据源来决定 源是对象 你就是你对象 源是数组你就是数组let result = Array.isArray(source) ? [] : {};for (const item in source) { // 遍历源 对象与数组的统一遍历方式是 for inif (typeof source[item] === "object") { //区分引用类型与普通类性别 引用类型继续处理(遍历)基本类型直接返回result[item] = copyData(source[item])} else {result[item] = source[item];}}return result; // 最终将结果返回}let fanyun = copyData(woniu);console.log(1,woniu,fanyun);woniu.subject.web = "web大前端"woniu.school[0].name = "总校区"console.log(2,woniu,fanyun);
相关文章:
[前端]深浅拷贝
一、回顾变量类型 基础类型 boolean(bool) number string null undefined 引用类型 object function array 基本类型与引用类型的存储 基本类型一般存储在 栈 (栈小) 栈一旦确认 大小就固定 可能会造成溢出栈一般是先进后出用于存储…...
文章纠错免费软件-文字校对软件免费下载
自动校对稿件的软件 自动校对稿件的软件是一种基于自然语言处理(Natural Language Processing, NLP)和机器学习(Machine Learning)技术的工具,可以较为准确地检测和纠正文本中出现的语法、拼写、标点符号以及其他笔误…...
【Redis】Redis缓存雪崩、缓存穿透、缓存击穿(热key问题)
目录 一、缓存穿透 1、概念 2、解决办法 1.缓存空对象 2.布隆过滤 二、缓存雪崩 1、概念 2、解决办法 1.给key设置随机的过期时间TTL 2.业务添加多级缓存 3.利用集群提供服务可用性 4.缓存业务添加降级限流 三、缓存击穿 1、概念 2、解决办法 1.互斥锁 2.逻辑…...
为什么很多程序员喜欢linux系统?
a> Linux哪些行业在运用? Linux系统运用极其广泛,不少用户只知道windows,是因为,Linux的运用主要是在企业端。现在科技极其发达,我们手机在手,就能干很多事情,只需点一点屏幕,轻松…...
Bean 作用域和生命周期
✏️作者:银河罐头 📋系列专栏:JavaEE 🌲“种一棵树最好的时间是十年前,其次是现在” 目录 lombok的使用案例引入作用域定义singleton单例作用域prototype原型作用域(多例作用域)request请求作用域session会话作用域ap…...
PMP考试常见13个固定套路
一、变更批准之后 变更批准后要做三件事: 1、在变更日志中记录 2、通知相关干系人 3、更新项目管理计划 二、风险的情景题 1、先判断风险识别了,还是风险发生了。 2、若是风险识别,按风险管理程序走; 3、若是风险发生,则应采取应急措施…...
Leecode101 ——对称二叉树
对称二叉树:Leecode 101 leecode 101 对称二叉树 根据题目描述,首先想清楚,对称二叉树要比较的是哪两个节点。对于二叉树是否对称,要比较的是根节点的左子树与根节点的右子树是不是相互翻转的,其实也就是比较两个树,…...
JVM学习随笔03——Java堆中new一个对象的步骤
目录 一、进行类加载 二、堆中分配内存 1、怎么输出GC日志: 2、内存分配的两种方式: 3、内存分配过程中并发控制的两种方式: 三、内存空间初始化 四、对象头初始化(对象头包含哪些信息?) 五、执行构…...
虹科方案 | CEMEX 使用HK-Edgility 智能边缘计算平台简化其企业 WAN 管理和运营
一、应对价值 130 亿美元的跨国企业的网络挑战 “我们选择 Edgility 是因为其卓越的管理和协调功能,它为我们提供了一个端到端的工具集,可以经济高效地部署和管理我们边缘设备的生命周期。” —— Fernando Garcia -Villaraco Casero, CEMEX 全球IT 战略…...
rk3568 系统移植和编译
1。 硬件问题 尽量根据原版 evb 开发版 pcb 进行布线和移植,切记不可自行走线。 emmc 和 ddr4 选型都有要求的,按照硬件手册进行设计 2。软件问题 2.1 目前固件系统选用1.3.2 版本进行设计 解压后运行 .repo/repo/repo sync -c 更新代码 2.2 ubo…...
深度解析C++异常处理机制:分类、处理方式、常见错误及11新增功能
C 基础知识 八 异常处理 上篇 一、基础1. 异常的概念2. 异常的分类2.1 内置异常2.2 自定义异常 3. 异常的处理方式3.1 try-catch 语句3.2 throw 语句3.3 noexcept 修饰符3.4 finally 语句块 二、 异常处理机制1 try-catch 语句块2 异常处理流程3 标准异常类 三、 抛出异常1 thr…...
FPGA时序约束(四)主时钟、虚拟时钟和时钟特性的约束
系列文章目录 FPGA时序约束(一)基本概念入门及简单语法 FPGA时序约束(二)利用Quartus18对Altera进行时序约束 FPGA时序约束(三)时序约束基本路径的深入分析 文章目录 系列文章目录前言主时钟约束跨时钟域…...
JNI开发
文件结构(选中的为生成的) CMake构建不需要执行命令,会自动生成so文件打包进apk Android mk构建需要执行命令生成so文件,再打包进apk。命令如下。 # 在jni目录下执行 # 生成com_demo_cppproject_OtherNdkTest.h头文件 javac -h .…...
JAVA有哪些特点?
JAVA有以下特点: 综上所述,Java作为一种先进的面向对象编程语言,具有简单、可移植、健壮、高性能、多线程、动态性、跨平台、开放性和安全性等众多特点,已经成为广泛使用的编程语言之一。 简单易学:JAVA语言的语法与C语…...
使用读写锁提高并发
我们想要的是:允许多个线程同时读,但只要有一个线程在写,其他线程就必须等待。 ReadWriteLock ReadWriteLock的作用: 只允许一个线程写入(其他线程既不能写入也不能读取);没有写入时…...
使用@PropertySource加载配置文件
1.PropertySource和PropertySources注解 1.1.PropertySource注解概述 PropertySource注解是Spring 3.1开始引入的配置类注解。通过**PropertySource注解可以将properties配置文件中的key/value存储到Spring的Environment中,Environment接口提供了方法去读取配置文…...
事务及分布式事务解决方案
基础概念 1.1.事务 事务可以看做是一次大的活动,它由不同的小活动组成,这些活动要么全部成功,要么全部失败。 1.2.本地事务 在计算机系统中,更多的是通过关系型数据库来控制事务,利用数据库本身的事务特性来实现&a…...
【思科、华为、华三、锐捷网络设备巡检命令】
华三 screen-1ength disable 取消分页 displayversion 查看版本 displayclock 查看日期时钟 displayfan 查看风扇状态 displaypower 查看电源信息 displaycpu-usage 查看CPU利用率 displaymemory 查看内存利用率 display environment 查看温度信息 display device 查看设备信息…...
代码随想录算法训练营第五十二天
代码随想录算法训练营第五十二天| 300.最长递增子序列,674. 最长连续递增序列,718. 最长重复子数组 300.最长递增子序列674. 最长连续递增序列718. 最长重复子数组 300.最长递增子序列 题目链接:最长递增子序列 这里是不用处理if nums[i] &l…...
【Linux网络】传输层中UDP和TCP协议
文章目录 1、再谈端口号2、UDP协议3、TCP协议3.1 TCP协议段格式3.2 TCP的三次握手和四次挥手(连接管理机制)3.3 TCP的滑动窗口3.4 TCP的流量控制3.5 拥塞控制3.6 延迟应答和捎带应答3.7 面向字节流和粘包问题3.8 TCP总结 1、再谈端口号 端口号port标识一…...
SpringCloud之分布式基础
1.单体架构单体架构是将所有业务功能(商品、订单、用户、支付、物流等)打包在一个应用项目中,部署在同一台服务器上的传统架构模式。架构流程:用户 → 通过域名( gulishop.com )访问 → 绑定服务器公网 IP …...
Word一打字就删除后面的文字
按下FN和esc,事esc变亮后,按下insert即可...
PyTorch Playground量化评估报告:不同bit宽度的精度损失分析
PyTorch Playground量化评估报告:不同bit宽度的精度损失分析 【免费下载链接】pytorch-playground Base pretrained models and datasets in pytorch (MNIST, SVHN, CIFAR10, CIFAR100, STL10, AlexNet, VGG16, VGG19, ResNet, Inception, SqueezeNet) 项目地址: …...
node2vec在Spark上的分布式实现:处理大规模图的终极解决方案
node2vec在Spark上的分布式实现:处理大规模图的终极解决方案 【免费下载链接】node2vec 项目地址: https://gitcode.com/gh_mirrors/no/node2vec 想要处理包含数千万甚至上亿节点的大规模图网络数据吗?node2vec在Spark上的分布式实现为你提供了处…...
Steam美区支付实战:巧用虚拟VISA与PayPal组合策略,解锁游戏购买与礼品卡赠送
1. Steam美区支付的核心痛点与解决方案 很多玩家都遇到过这样的问题:好不容易注册了美区Steam账号,却发现国内的信用卡根本无法完成支付。我自己刚开始折腾美区账号时,也在这个环节卡了整整两周。Steam的风控机制确实严格得令人头疼ÿ…...
c++如何利用C++23的std--expected重构文件操作的错误管理代码【实战】
std::expected<T, E> 是 C23 提供的零成本错误处理机制,强制调用方显式处理成功与失败分支,适用于预期会失败且需响应的场景(如文件操作、网络请求),优于 errno 返回值、std::optional 或异常滥用。std::expect…...
Decision Transformer与行为克隆对比分析:何时选择哪种方法
Decision Transformer与行为克隆对比分析:何时选择哪种方法 【免费下载链接】decision-transformer Official codebase for Decision Transformer: Reinforcement Learning via Sequence Modeling. 项目地址: https://gitcode.com/gh_mirrors/de/decision-transfo…...
OpenClaw多通道监控:百川2-13B-4bits同时响应飞书与网页指令
OpenClaw多通道监控:百川2-13B-4bits同时响应飞书与网页指令 1. 为什么需要多通道监控 上周三凌晨两点,我被连续不断的手机振动惊醒——飞书机器人正在疯狂推送任务失败告警。原来团队同时通过飞书群和网页控制台提交了数据清洗任务,导致百…...
爱毕业aibye推出六大专业学术平台,集成智能改写与高效写作功能,轻松提升科研效率。
工具名称 核心功能 特色优势 Aibiye 论文生成降AI率 全学科覆盖、仿写优化、自动图表生成 Aicheck AI检测文献综述辅助 精准查新、3分钟高效成文 GPT学术版 润色/翻译/代码解释 多模型协同、PDF深度解析 摆平论文 大纲生成降重改写 三步出稿、本硕博通用 QuillB…...
无线工程师必备:用Wireshark解码802.11ac VHT Capabilities字段全攻略(含160MHz配置示例)
无线网络深度解析:802.11ac VHT Capabilities字段实战指南 在当代企业级无线网络部署中,802.11ac协议已成为高吞吐量应用的核心支撑。作为无线工程师,能否精准解读VHT(Very High Throughput)Capabilities信息元素&…...
