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

深拷贝和浅拷贝的主要区别

在JavaScript中,深拷贝和浅拷贝的主要区别在于它们处理对象属性的方式。

浅拷贝(Shallow Copy)只复制对象的引用,而不是实际的对象。因此,如果你修改了复制的对象,原始对象也会受到影响。

深拷贝(Deep Copy)则会创建一个新的对象,并复制原始对象的所有元素。这样,如果你修改了复制的对象,原始对象不会受到影响。

浅拷贝示例:

let obj1 = { a: 1, b: { c: 2 } };  
let obj2 = Object.assign({}, obj1);  console.log(obj1); // { a: 1, b: { c: 2 } }  
console.log(obj2); // { a: 1, b: { c: 2 } }  obj2.a = 2;  
console.log(obj1); // { a: 1, b: { c: 2 } }  
console.log(obj2); // { a: 2, b: { c: 2 } }  obj2.b.c = 3;  
console.log(obj1); // { a: 1, b: { c: 3 } }  
console.log(obj2); // { a: 2, b: { c: 3 } }

 在这个例子中,Object.assign({}, obj1) 创建了一个新对象 obj2,并将 obj1 的所有属性复制到 obj2。但是,当修改 obj2.b.c 时,obj1.b.c 也被修改了,因为 obj1 和 obj2 共享同一个 b 对象。

深拷贝示例:

let obj1 = { a: 1, b: { c: 2 } };  
let obj2 = JSON.parse(JSON.stringify(obj1));  console.log(obj1); // { a: 1, b: { c: 2 } }  
console.log(obj2); // { a: 1, b: { c: 2 } }  obj2.a = 2;  
console.log(obj1); // { a: 1, b: { c: 2 } }  
console.log(obj2); // { a: 2, b: { c: 2 } }  obj2.b.c = 3;  
console.log(obj1); // { a: 1, b: { c: 2 } }  
console.log(obj2); // { a: 2, b: { c: 3 } }

在这个例子中,JSON.parse(JSON.stringify(obj1)) 创建了一个新对象 obj2,并将 obj1 的所有属性复制到 obj2。然后,修改 obj2.b.c 并不会影响 obj1.b.c,因为 obj1 和 obj2 有不同的 b 对象。这是因为 JSON.stringify 方法将对象转换为 JSON 字符串,然后 JSON.parse 方法将 JSON 字符串转换回新对象。在这个过程中,所有的对象都会被转换为新的对象。

相关文章:

深拷贝和浅拷贝的主要区别

在JavaScript中,深拷贝和浅拷贝的主要区别在于它们处理对象属性的方式。 浅拷贝(Shallow Copy)只复制对象的引用,而不是实际的对象。因此,如果你修改了复制的对象,原始对象也会受到影响。 深拷贝&#xf…...

Git Cherry Pick的使用

cherry-pick命令的基本用法 cherry-pick命令的基本语法如下&#xff1a; git cherry-pick <commit>其中&#xff0c;<commit>是要应用的提交的哈希值或分支名。该命令会将指定的提交应用到当前分支上&#xff0c;并创建一个新的提交。 使用场景 cherry-pick命令…...

vue3后台管理框架之基础配置

配置vite.config.js import { defineConfig } from viteimport vue from vitejs/plugin-vueexport default defineConfig(({ command, mode }) > {//const env loadEnv(mode, process.cwd(), ) //获取环境变量return {// 打包devbase: ./,// 开发环境server: {port: 5002,…...

Easysearch压缩模式深度比较:ZSTD+source_reuse的优势分析

引言 在使用 Easysearch 时&#xff0c;如何在存储和查询性能之间找到平衡是一个常见的挑战。Easysearch 具备多种压缩模式&#xff0c;各有千秋。本文将重点探讨一种特别的压缩模式&#xff1a;zstd source_reuse&#xff0c;我们最近重新优化了 source_reuse,使得它在吞吐量…...

扩散模型的系统性学习(一):DDPM的学习

文章目录 一、学习的资料1.1 对于扩散模型的发展过程的综述1.2对论文中涉及的公式以及公式对应的代码的解读1.3github中对于各模型实现的代码1.4相关基础知识的学习 二、DDPM的学习2.1 DDPM总体知识的梳理2.2相关代码的解读2.2.1unet 代码块2.2.2高斯扩散代码块2.2.3 实验流程代…...

注意力屏蔽(Attention Masking)在Transformer中的作用 【gpt学习记录】

填充遮挡&#xff08;Padding Masking&#xff09;&#xff1a; 未来遮挡&#xff08;Future Masking&#xff09;&#xff1a;...

MyBatisPlus详解

前言: 📕作者简介:热爱编程的小七,致力于C、Java、Python等多编程语言,热爱编程和长板的运动少年! 📘相关专栏Java基础语法,JavaEE初阶,数据库,数据结构和算法系列等,大家有兴趣的可以看一看。 😇😇😇有兴趣的话关注博主一起学习,一起进步吧! 一、MyBatis…...

组合数的计算

C: 即从a个元素中选取b个元素的组合数。 LL C(int a, int b) {LL res 1;for (int i a, j 1; j < b; i --, j )res res * i / j;return res; } A: 表示从a个元素中选取b个元素进行排列的情况数。 LL P(int a, int b) {LL res 1;for (int i a; i > a - b; i--){res…...

linux之shell记录

shell属于一种很容易学习的程序设计语言&#xff0c;依赖于功能强大的命令可以编写提高开发效率的脚本。这里记录一下常用的shell相关的知识点。 持续更新中。。。 1、在linux或mac中查看使用的shell echo $SHELL /bin/bashshell是一种脚本语言&#xff0c;就会有解释器来执行…...

外卖大数据案例

一、环境要求 HadoopHiveSparkHBase 开发环境。 二、数据描述 meituan_waimai_meishi.csv 是某外卖平台的部分外卖 SPU&#xff08;Standard Product Unit &#xff0c; 标准产品单元&#xff09;数据&#xff0c;包含了外卖平台某地区一时间的外卖信息。具体字段说明如下&am…...

到底什么是5G-R?

近日&#xff0c;工信部向中国国家铁路集团有限公司&#xff08;以下简称“国铁集团”&#xff09;批复5G-R试验频率的消息&#xff0c;引起了行业内的广泛关注。 究竟什么是5G-R&#xff1f;为什么工信部会在此时批复5G-R的试验频率&#xff1f; 今天&#xff0c;小枣君就通过…...

uniapp 使用和引入 thorui

1. npm install thorui-uni 2. "easycom": { "autoscan": true, "custom": { "tui-(.*)": "thorui-uni/lib/thorui/tui-$1/tui-$1.vue" } }, 3....

vue3中ref和reactive的区别

原文地址 深入聊一聊vue3中的reactive()_vue3 reactive_忧郁的蛋~的博客-CSDN博客 ref和reactive的区别-CSDN博客 理解&#xff1a; 1.ref是定义简单类型 和单一的对象 2.reactive 定义复杂的类型 梳理文档&#xff1a; ref和reactive都是Vue.js 3.x版本中新增的响应式API&…...

文件路径操作

避开-转义字符 python文件路径导致的错误常常与“\”有关&#xff0c;因为在路径中的“\”常会被误认为转义字符。 所以在上述路径中&#xff0c;\table\name\rain中的\t,\n,\r都易被识别为转义字符。 解决的办法主要由以下三种&#xff1a; #1 前面加r表示不转义 pathr&quo…...

Java Cache 缓存方案详解及代码-Ehcache

一、Spring缓存概念 Spring从3.1开始定义了 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口来统一不同的缓存技术&#xff1b; 并支持使用 JCache&#xff08;JSR-107&#xff09; 注解简化我们开发。 常用的缓存实现有 RedisCache 、EhCach…...

JAVA设计模式-装饰者模式

一.概念 装饰器模式(Decorator Pattern)&#xff0c;动态地给一个对象添加一些额外的职责&#xff0c;就增加功能来说&#xff0c;装饰器模式比生成子类更灵活。 —-《大话设计模式》 允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其结构。这种类型的设计模式属…...

STM32F1简介

前言 本次学习使用的是STM32F1系列的芯片&#xff0c;72MHz的Cortex-M3内核&#xff1b; 名词解释 STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器&#xff08;MCU&#xff09;&#xff1b; ARM Cortex-M内核是ARM公司设计的&#xff0c;程序指令的执行&#xff0c;…...

SpringBoot面试题6:Spring Boot 2.X 有什么新特性?与 1.X 有什么区别?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring Boot 2.X 有什么新特性?与 1.X 有什么区别? Spring Boot是一种用于简化Spring应用程序开发的框架,它提供了自动配置、起步依赖和快速开…...

qt笔记之qml下拉标签组合框增加发送按钮发送标签内容

qt笔记之qml下拉标签组合框增加发送按钮发送标签内容 code review! 文章目录 qt笔记之qml下拉标签组合框增加发送按钮发送标签内容1.运行2.文件结构3.main.qml4.main.cc5.MyClass.h6.MyClass.cc7.CMakeLists.txt8.ComboBox.pro9.qml.qrc 1.运行 2.文件结构 3.main.qml 代码 …...

linux上构建任意版本的rocketmq多架构x86 arm镜像——筑梦之路

现状 目前市面上和官方均只有rocketmq x86架构下的docker镜像&#xff0c;而随着国产化和信创适配的需求越来越多&#xff0c;显然现有的x86架构下的docker镜像不能满足多样化的需求&#xff0c;因此我们需要根据官方发布的版本制作满足需求的多架构镜像&#xff0c;以在不同cp…...

Laravel DDD架构实践:使用Neuron Core构建可维护业务系统

1. 项目概述&#xff1a;一个为Laravel打造的现代化神经元网络核心如果你正在用Laravel构建一个中大型应用&#xff0c;并且已经受够了在控制器里塞满几百行业务逻辑&#xff0c;或者在模型里写满各种scope和accessor&#xff0c;让它们变得臃肿不堪&#xff0c;那么neuron-cor…...

FPGA设计避坑指南:从复位电路到跨时钟域,手把手教你搞定亚稳态

FPGA实战&#xff1a;亚稳态问题全解析与工程级解决方案 在FPGA开发中&#xff0c;亚稳态问题如同潜伏的幽灵&#xff0c;往往在系统最不稳定的时候显现&#xff0c;导致数据错误、系统崩溃等难以追踪的故障。本文将从一个真实的UART接收模块案例出发&#xff0c;深入剖析亚稳态…...

5分钟搞定Windows和Office激活:KMS_VL_ALL_AIO智能激活完全指南

5分钟搞定Windows和Office激活&#xff1a;KMS_VL_ALL_AIO智能激活完全指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活而烦恼吗&#xff1f;每次重装系统后都要面对繁…...

AI智能体技能超市:用SKILL.md标准打破AI能力壁垒

1. 项目概述&#xff1a;一个为AI智能体准备的“技能超市” 如果你和我一样&#xff0c;每天都在和各种AI编程助手打交道——Cursor、Claude Code、GitHub Copilot&#xff0c;那你肯定也遇到过这样的场景&#xff1a;想让AI帮你生成一张产品原型图&#xff0c;结果它告诉你“我…...

Axure RP中文语言包技术深度解析:从键值对到国际化架构的工程实践

Axure RP中文语言包技术深度解析&#xff1a;从键值对到国际化架构的工程实践 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 在…...

AI 搜索重新重视来源:内容平台的新机会不是被点击,而是被正确引用

生成式搜索刚出现时&#xff0c;很多内容创作者最担心的问题是&#xff1a;如果答案直接出现在搜索页&#xff0c;用户还会不会点进原文&#xff1f;这个担心并不多余。AI Overviews、AI Mode 和各类答案引擎&#xff0c;确实改变了“搜索结果页到网页”的传统路径。但现在更值…...

GitHub Enterprise MCP服务器:企业级代码管理的AI智能助手

1. 项目概述&#xff1a;当GitHub Enterprise遇上MCP&#xff0c;企业级代码管理的“智能副驾”最近在折腾企业内部的开发工具链&#xff0c;发现一个痛点&#xff1a;我们团队重度依赖GitHub Enterprise Server&#xff08;GHES&#xff09;进行代码托管和协作&#xff0c;但日…...

Midjourney生成伪3D到真3D渲染的临界点在哪?——基于1327组渲染样本的Z-depth一致性、法线贴图兼容性与Blender导入成功率实测报告

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney生成伪3D到真3D渲染的临界点在哪&#xff1f; Midjourney 本身不生成可编辑的 3D 几何体&#xff0c;其输出始终是静态二维图像——即便使用 --style raw 或 --v 6.1 配合 3D render、octane…...

基于reflectt-node的WebSocket RPC实践:构建实时协作待办应用

1. 项目概述与核心价值 最近在折腾一个需要实时双向通信的Web应用&#xff0c;传统的轮询和长轮询方案在性能和资源消耗上总感觉差那么点意思。后来把目光投向了WebSocket&#xff0c;但原生WebSocket的API相对底层&#xff0c;自己管理连接、心跳、重连、消息序列化这些琐事&a…...

3分钟掌握9大网盘直链解析:告别限速烦恼的高效下载方案

3分钟掌握9大网盘直链解析&#xff1a;告别限速烦恼的高效下载方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…...