深拷贝和浅拷贝讲解

浅拷贝

在JavaScript中,有几种实现浅拷贝的方法。浅拷贝会复制对象的属性值,但是如果属性值是对象的话,它们仍然会共享同一个引用。以下是几种常见的浅拷贝方法:
1、对象展开运算符(Spread Operator):这是一种简单且常见的浅拷贝方法。它使用 … 操作符来将一个对象的属性复制到另一个对象中。

const originalObj = { a: 1, b: 2 };
const shallowCopy = { ...originalObj };

2、Object.assign() 方法:这个方法可以用来将所有可枚举属性的值从一个或多个源对象复制到目标对象。

const originalObj = { a: 1, b: 2 };
const shallowCopy = Object.assign({}, originalObj);

3、Array.prototype.slice() 方法:这个方法对于数组的浅拷贝也是有效的。

const originalArray = [1, 2, 3];
const shallowCopy = originalArray.slice();

5、Array.prototype.concat() 方法:对于数组也可以使用 concat 方法进行浅拷贝。

const originalArray = [1, 2, 3];
const shallowCopy = originalArray.concat();

6、Array.from() 方法:这个方法可以将类数组对象或可迭代对象转换为真正的数组,也可以用于浅拷贝。

const originalArray = [1, 2, 3];
const shallowCopy = Array.from(originalArray);
深拷贝

深拷贝是指在拷贝对象或数组时,不仅复制其属性或元素的值,还要递归地复制其内部的所有对象或数组,确保拷贝后的对象或数组与原始对象或数组完全独立,彼此之间不会共享任何引用。在JavaScript中,实现深拷贝相对比较复杂,因为需要处理对象的嵌套结构和循环引用等情况。以下是几种实现深拷贝的方法:
1、递归实现:递归地遍历对象或数组,对每个属性或元素进行复制,并在遇到对象或数组时递归调用深拷贝函数。

function deepCopy(data) {
    if (typeof data !== 'object' || data === null) {
        return data; // 非对象直接返回
    }
    
    let copied = Array.isArray(data) ? [] : {};
    for (let key in data) {
        if (data.hasOwnProperty(key)) {
           // 递归复制子对象或子数组
            copied[key] = deepCopy(data[key]); 
        }
    }
    return copied;
}

2、JSON 序列化与反序列化:利用JSON.stringify()将对象转换为JSON字符串,再利用JSON.parse()将JSON字符串解析为新的对象。这种方法简单易行,但是对于包含函数、正则表达式等特殊类型的属性会丢失。

function deepCopy(obj) {
    return JSON.parse(JSON.stringify(obj));
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HWOD:合并整型数组

一、知识点 合并整型数组目前有两种方法 合并数组并不一定需要真正的合并 1、下意识的方法 对两个整型数组分别排序,然后合并 2、不排序的方法 遍历两个数组,找出最小值,输出最小值。将两个数组中与最小值相等的位置置为超大值 重复以…

二叉树oj题(2)

1.二叉树的最近公共祖先 解题思路:方法一: 1.先判断p或者q 是不是 root当中的一个 2.左子树当中递归査找p或者q 3.右子树当中递归查找p或者q 如何查找: root 的 left 和 right 都不为空 ->root root的 left 为空 right 不为空->right这一侧找…

终于有人说明白了session、cookie和token的区别

一、首先介绍一下名词:Session、cookie、token,如下: 1.Session会话:客户端A访问服务器,服务器存储A的数据value,把key返回给客户端A,客户端A下次带着key(session ID)来…

ROS轻松入门(一)—— 基本概念:node节点、topic通信、service通信

node节点 ROS 中的每个节点都应该负责单一的、模块化的目的,例如控制车轮马达或发布来自激光测距仪的传感器数据。每个节点都可以通过主题、服务、操作或参数从其他节点发送和接收数据。 一个完整的机器人系统由许多协同工作的节点组成。在 ROS 2 中,单…

【java配置】jpcap的下载与idea配置

解决报错:Cannot resolve symbol ‘jpcap’ 1. jpcap的下载 官网下载链接 百度网盘下载 双击WinpPca安装,jacap1和jpcap2任选其中之一 2. idea配置 (1)查看当前使用jdk目录 File -> Project Settings -> SDKs &#…

STM32H750时钟频率和功耗以及RTC功能测试

STM32H750时钟频率和功耗和RTC功能测试 📌相关篇《STM32H750片外QSPI启动配置简要》 ✨在使用STM32CubeMX修改STM32H750时钟树参数时,如果使用软件自动求解,这是一个非常耗时的操作,有时候还不一定成功,还是推荐使用手…

2024成都直播电商硝烟再起,天府锋巢AI 时代拉开帷幕

在今年1月份的“AI重构电商”生态大会上,百度借力AI数字人直播和文心大模型能力杀入电商场内,强调“AI重塑电商”。成都兴隆湖畔,天府锋巢直播产业基地计划开展高质量、低成本、互动性更强的虚拟数字人直播,为直播行业注入新的活力…

低代码技术与仓储管理的新纪元:革命性的供应链变革

引言 在当今数字化时代,企业对于创新和效率的追求越发迫切。在这样的背景下,低代码技术应运而生,成为企业数字化转型的重要工具之一。低代码技术的崛起为企业提供了一种快速、灵活、成本效益高的开发方式,大大缩短了软件开发周期…

2024五一劳动节市集露营生活节活动策划方案

2024五一劳动节市集露营生活节(向野而生 躺平生活节主题)活动策划方案 方案页码:72页 文件格式:pptx 方案简介: 五一躺平生活节 咖啡一饮,书本一翻,轻松又自在,看着窗外的阳光,…

4.23日总结(项目总结)

1.项目: 今日项目通过一个在登录界面的一个静态变量,完成了区分老师和学生,能够分开老师和学生,并且不同身份的人进去会有不同的显示,以及登录链接主界面,还有学生和老师的不同的表,其次就是创…

「51媒体」新闻媒体邀约如何进行媒体宣传(方法)

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 新闻媒体邀约进行媒体宣传是一个策略性的过程,旨在吸引媒体的注意力并促使其对特定事件、产品发布或企业活动进行报道。以下是一些关键步骤和策略: 制定媒体传播方…

rust 学习笔记(13-19)

13 迭代器与闭包 Rust 的设计灵感来源于很多现存的语言和技术。其中一个显著的影响就是 函数式编程(functional programming)。函数式编程风格通常包含将函数作为参数值或其他函数的返回值、将函数赋值给变量以供之后执行等等。 闭包(Closu…

网络爬虫快速入门及爬取百度搜索结果(附源码)

前言 爬虫的基本结构及工作流程 1. 确定目标 首先,确定你想要爬取的目标,包括目标网站或网页、需要提取的数据类型(如文本、图片、视频等)以及爬取的深度(单页、整个网站等)。 2. 获取网页内容 使用HT…

刷题之Leetcode242题(超级详细)

242.有效的字母异位词 力扣题目链接(opens new window)https://leetcode.cn/problems/valid-anagram/ 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 示例 1: 输入: s "anagram", t "nagaram" 输出: true 示例 2…

基于51单片机的数码管显示的proteus仿真

文章目录 一、数码管二、单个数码管显示0~F仿真图仿真程序 三、数码管静态显示74HC138译码器74HC245缓冲器仿真图仿真程序 四、数码管动态显示仿真图仿真程序 三、总结 一、数码管 数码管,也称作辉光管,是一种可以显示数字和其他信息的电子设备。它的基…

Abaqus2024 安装教程(附免费安装包资源)

鼠标右击软件压缩包,选择“解压到Abaqus2024”。 鼠标右击“此电脑”,选择“属性”。 点击“高级系统设置”。 点击“环境变量”。 点击“新建”。 变量名输入:NOLICENSECHECK 变量值输入:true 然后点击“确定”。 点击“确定”。…

SD-WAN多分支组网案例分享

随着企业规模持续扩大,业务版图日益多元,多分支组网已成为企业网络建设的核心议题。如何构建高效、安全且灵活的网络连接,成为企业急需解决的关键问题。近些年,SD-WAN技术的崭露头角,为企业带来了前所未有的解决方案。…

芯片数字后端设计入门书单推荐(可下载)

数字后端设计,作为数字集成电路设计的关键环节,承担着将逻辑设计转化为物理实现的重任。它不仅要求设计师具备深厚的电路理论知识,还需要对EDA工具有深入的理解和熟练的操作技能。尽管数字后端工作不像前端设计那样频繁涉及代码编写&#xff…

PLC无线通讯技术在汽车喷涂车间机械手臂上的应用

一、项目背景 在汽车生产装配工艺中,机械臂目前已经广泛地应用于装配、搬运等工业生产中,在机械臂系列产品中,汽车喷漆自动控制喷涂机械装置以其独特的优势,能够根据油漆喷涂量的大小,严格控制喷嘴与喷漆面之间距离等…

【数据库】聊聊普通索引和唯一索引怎么选

业务场景 在实际的业务中,一般都有用户信息表,而存储的数据包括(姓名、手机号、身份证号),对于业务层面来说一个人的身份证号是唯一确定的,所以在创建表的时候,针对身份证号列就可以选择创建普通索引或唯一索引。那么…
最新文章