JS中浅拷贝和深拷贝的区别

在JavaScript中,浅拷贝和深拷贝是用于复制对象或数组的两种常用方法。它们之间的区别在于复制的程度。

1.浅拷贝:浅拷贝是指创建一个新的对象或数组,将原始对象或数组的引用复制给新的对象或数组。这意味着原始对象和新的对象将共享相同的引用,修改其中一个对象的属性将会影响到另一个对象。浅拷贝通常通过Object.assign()或扩展运算符(...)来实现。

// 浅拷贝示例
const obj1 = {name: 'Alice', age: 25};
const obj2 = Object.assign({}, obj1);
obj2.age = 30;

console.log(obj1); // { name: 'Alice', age: 25 }
console.log(obj2); // { name: 'Alice', age: 30 }

在上面的示例中,通过Object.assign()将obj1的属性复制到obj2。修改obj2的age属性不会影响到obj1,因为它们引用的是不同的对象。

2.深拷贝:深拷贝是指创建一个新的对象或数组,并递归复制所有嵌套的对象和数组,使得原始对象和新的对象完全独立。这意味着修改其中一个对象的属性不会影响到另一个对象。深拷贝通常通过递归遍历对象或数组的属性,并创建新的对象或数组来实现。

// 深拷贝示例
const obj1 = {name: 'Alice', age: 25};
const obj2 = JSON.parse(JSON.stringify(obj1));
obj2.age = 30;

console.log(obj1); // { name: 'Alice', age: 25 }
console.log(obj2); // { name: 'Alice', age: 30 }

在上面的示例中,通过JSON.stringify()将obj1转换为字符串,然后再通过JSON.parse()将字符串转换为新的对象obj2实现深拷贝。修改obj2的age属性不会影响到obj1。

需要注意的是,深拷贝可能会因为对象或数组属性的循环引用而导致栈溢出或无限循环的问题。因此,在实际应用中,需要根据情况选择合适的方法来实现浅拷贝或深拷贝

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/7921.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elastic 通过 AI 驱动的安全分析改变 SIEM 游戏

作者:Santosh Krishnan, Jennifer Ellard 借助由搜索 AI 提供支持的新攻击发现功能,优先考虑攻击,而不是警报。 传统的安全信息与事件管理系统(SIEM)在很大程度上依赖屏幕背后的人类才能取得成功。警报、仪表盘、威胁…

Python面向对象编程思想的深入学习

魔术方法的使用 案例体验 class Student:def __init__(self, name, age):self.name nameself.age age# __str__魔术方法, 如果不去写这个方法,那么print输出的则是信息存储的内存地址。def __str__(self):return fStudent类对象,name:{self.name}, ag…

【爬虫】fake_useragent的使用、BeautifulSoup(find()和find_all())

1 fake_useragent 2 BeautifulSoup 3 Beautiful Soup库的find()和find_all() 1 fake_useragent fake_useragent是一个Python库,用于生成随机的用户代理字符串。 用户代理是在HTTP请求中发送给服务器的一种标识,它告诉服务器发送请求的客户端的类型、版本…

PVZ2 植物克僵尸【第二期】

众所周知,PVZ2(植物大战僵尸2)中有许多恶心的僵尸,而我们不得不派出它们的————克星!(*为建议方法) 5.战机小鬼 战机小鬼,恶心会发射子弹,所以: 1&…

Ubuntu18.04设置SSH密钥登录

我们一般使用 VSCode 、MobaXterm、PuTTY等 SSH 客户端来远程管理 Linux 服务器。但是,一般的密码方式登录,容易有密码被暴力破解的问题。所以,一般我们会将 SSH 的端口设置为默认的 22 以外的端口,或者禁用 root 账户登录。但是即…

Autosar NvM配置-手动配置Nvblock及使用-基于ETAS软件

文章目录 前言NvDataInterfaceNvBlockNvM配置SWC配置RTE Mapping使用生成的接口操作NVM总结前言 NVM作为存储协议栈中最顶层的模块,是必须要掌握的。目前项目基本使用MCU带的Dflash模块,使用Fee模拟eeprom。在项目前期阶段,应该充分讨论需要存储的内容,包括应用数据,诊断…

JSP企业快信系统的设计与实现参考论文(论文 + 源码)

【免费】JSP企业快信系统.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89277688 JSP企业快信系统的设计与实现 摘 要 计算机网络的出现到现在已经经历了翻天覆地的重大改变。因特网也从最早的供科学家交流心得的简单的文本浏览器发展成为了商务和信息的中心…

OSPF邻居建立后学不到路由?新手做项目最容易犯这个错!

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 你们好,我的网工朋友。 新手经常会在配置OSPF时遇到一些棘手的问题,比如由于接口网络类型配置不一致导致的邻居关系建立失…

【C++ 关键字】const 关键字详解

文章目录 1. const 概念2.常量指针 和 指针常量 的区别2.1 常量指针(底层 const)2.2 指针常量 (顶层 const) 3.const 关键字的作用4.const 和 define 的区别5.const 总结 1. const 概念 const 是一个关键字,被修饰的值不能改变,是…

通过 Java 操作 redis -- 连接 redis

如果我们想在本地主机上访问 Linux 服务器上的 redis ,我们就需要通过 ssh 进行端口转发,推荐看 本地主机访问服务器的Redis -- 配置 ssh 端口转发 通过 Java 操作 redis 已经有大佬创建了很多第三方库,这里我们使用 jedis ,因为它…

Git系列:git push (-u) 与 git branch (-u)

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

硬盘惊魂!文件夹无法访问怎么办?

在数字时代,数据的重要性不言而喻。然而,有时我们会遇到一个令人头疼的问题——文件夹提示无法访问。当你急需某个文件夹中的文件时,却被告知无法打开,这种感受真是难以言表。今天,我们就来深入探讨这个问题&#xff0…

FPGA学习笔记(3)——正点原子ZYNQ7000简介

1 ZYNQ-7000简介 ZYNQ 是由两个主要部分组成的:一个由双核 ARM Cortex-A9 为核心构成的处理系统(PS,Processing System),和一个等价于一片 FPGA 的可编程逻辑(PL,Programmable Logic&#xff0…

AIGC-3D数字人技术:高效助推各行业数字化水平升级

从“互联网”到“人工智能”,数字员工作为一种全新的交互形式,对企业有着重要的作用,企业、品牌通过数字人的AI语音交互、AI播报等核心功能,可以有效推动企业提升数字水平。 作为3D、AI虚拟数字人技术服务商及方案提供商&#xff…

Quora 首席执行官亚当·德安杰洛 (Adam D’Angelo) 谈论了 AI、聊天机器人平台 Poe,以及 OpenAI 为什么不是竞争对手

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

cmake进阶:目录属性之 INCLUDE_DIRECTORIES说明一

一. 简介 前一篇文章学习了 cmake的一些目录属性,其中最重要的是 头文件搜索路径。文章如下: cmake进阶:目录属性说明一-CSDN博客 本文主要学习 一个目录属性 INCLUDE_DIRECTORIES,即头文件搜索路径。 二. cmake进阶&#xff1…

【React】React-redux多组件间的状态传递

效果(部分完整代码在最底部): 编写 Person 组件 上面的 Count 组件,已经在前面几篇写过了,也可以直接翻到最底部看 首先我们需要在 containers 文件夹下编写 Person 组件的容器组件 首先我们需要编写 index.jsx 文件…

Python文件读取和写入

文件读取和写入是 Python 中常见的操作之一,通过这些操作,我们可以读取外部文件中的数据,对其进行处理,并将处理结果写入到文件中。本文将详细介绍 Python 中的文件读取和写入操作,包括如何打开文件、读取文件内容、写…

stm32之hal库串口中断和ringbuffer的结合

前言 结合hal库封装的中断处理函数使用rt-thread内部的rt-ringbuffer数据结构源码改造hal库串口部分的源码,将内部静态方法变为弱引用的函数,方便重写标志位采用信号量或变量的两种方式,内部数据分配方式采用动态和静态两种方式 hal库部分串…

【免费】虚拟同步发电机(VSG)惯量阻尼自适应控制仿真模型【simulink】

目录 主要内容 仿真模型要点 2.1 整体仿真模型 2.2 电压电流双闭环模块 2.3 SVPWM调制策略 2.4 无功电压模块 2.5 自适应控制策略及算法 部分结果 下载链接 主要内容 该模型为simulink仿真模型,主要实现的内容如下: 随着风力发电、光…