JS深浅拷贝

保姆级教程:在Ubuntu 22.04上用VLLM+OpenWebUI部署DeepSeek-R1-14B(含Q8量化模型下载) 本文提供在Ubuntu 22.04上使用VLLM和OpenWebUI部署DeepSeek-R1-14B大语言模型的完整教程,包括环境配置、模型下载、VLLM参数调优及OpenWebUI集成。特别针对Q8量化模型优化部署流程,解决CUDA版本冲突等常见问题,适合开发者快速搭建本地AI对话系统。 阅读详情

为什么使用深浅拷贝

在JS中我们经常会遇到一个数据赋值,但是又不符合真正意义上的数据赋值的问题。这个问题产生的原因又是什么呢?这就先要了解一下JS的数据类型了,在JS中数据类型分为基本数据类型和引用数据类型两大派系。众所周知基本数据类型存储的位置就是栈中,以key=>value的形式去存储的,每一个value都对应一个key,但是在引用数据类型中他的存储结构并不是栈而是堆,在堆中堪比一个空间将数据放入,然后这个时候生成一个地址,再将这个地址放入栈中,以key=>value的形式存储。那么问题来了,如果将引用数据类型赋值给另一个变量实际上是将这个地址赋值给了另一个变量。那在修改这个引用数据类型的同时,实际上整堆中的数据就会被修改,其他引用该地址的变量数据也会发生改变,这就会导致程序出现紊乱。怎么解决呢?

浅拷贝

简单理解就是他只拷贝对象数据的第一层或者只是一个赋值的操作并没有将地址发生改变

  • 案例
function shallowClone() {
    var obj1 = { a: 1, b: 2, c: 3 };
    var obj2 = { d: 4, e: 5, f: 6 };
    for(var attr in obj2){
        obj1[attr] = obj2[attr];
    }
    return obj1;
}

深拷贝

深拷贝是完全创建一个新的地址的存储空间,同时可以多次递归形式的去拷贝数据

  • 案例(普通版本)
function deepCLone(obj) {
    var _obj = {};

    for (var attr in obj) {
        _obj[attr] = obj[attr];
    }
    return _obj;
}
// 这个返回结果的数据就是地址完全不一样
var obj = deepCLone({ a: 1, b: 2 });
console.log(obj);
  • 案例(递归形式拷贝)
function deepClone(obj) {
        
    var _obj = {};

        for (var attr in obj) {
            // 如果不是引用数据类型我们直接复制就行了 如果是引用数据类型我们需要判断然后创建一个新的对象在进行赋值
            if (typeof obj[attr] === "object" && obj[attr] !== null && obj[attr].constructor && obj[attr].constructor === Object) {
                // 是对象
                _obj[attr] = deepClone(obj[attr]);
            } else {
                _obj[attr] = obj[attr];
            }
        }
        return _obj;
    }

var obj = {
    a: 1,
    b: {
        str: "hhhh"
    }
}
var newObj = deepClone(obj);
console.log(newObj, newObj.b === obj.b) // false
  • 案例(拷贝数组)
function deepClone(obj, type) {

    var _content = type === "array" ? [] : {};
        for (var attr in obj) {
            // 如果不是引用数据类型我们直接复制就行了 如果是引用数据类型我们需要判断然后创建一个新的对象在进行赋值
            if (typeof obj[attr] === "object" && obj[attr] !== null && obj[attr].constructor && obj[attr].constructor === Object) {
                // 是对象
                _content[attr] = deepClone(obj[attr]);
            } else if (Array.isArray(obj)) {
                _content[attr] = deepClone(obj[attr], "array");
            }
            else {
                _content[attr] = obj[attr];
            }
        }
        return _content;
    }
var obj = {
    a: 1,
    b: [1, 2, 3, 4, 5],
    c: {
        str: "hello"
    }
}
var newObj = deepClone(obj);
console.log(newObj);
  • 案例(深拷贝黑科技)
// 函数在拷贝过程中怎么处理 这时候有个滑头的操作
 var obj1 = {
     foo : function(){
         console.log(1);
     }
 }
 // 将函数先转成字符串在使用eval将可执行的js代码成功转换
 var newFn = eval("("+obj1.foo.toString()+")");
console.log(newFn)

// 黑科技深拷贝 一般人我不告诉他
var obj1 = {
    a: 1,
    b: 2,
    c: {
        str: "hello"
    },
    d: [1, 2, 3, 4],
    f: function () {
        console.log(1);
    }
}
var obj2 = JSON.parse(JSON.stringify(obj1));
console.log(obj2); // 虽然这个黑科技好用但是也要慎重使用因为是ES5中支持的而且有的时候在处理数据的转换的时候会出现异常情况

总结

我觉得深浅拷贝的含义并不难理解,只需要搞懂JS的数据类型的存储结构和特点就可以轻松理解什么是深浅拷贝了。

Oracle 查看 rman 备份情况 SQL 语句 每天一个 DBA 小知识,助你更进一步! 阅读详情

相关推荐

CentOS 7下Synopsys DC综合工具安装与配置全攻略(附常见报错解决方案)

本文详细介绍了在CentOS 7操作系统上安装与配置Synopsys Design Compiler(DC)综合工具的完整流程。内容涵盖从系统环境准备、软件安装、许可证配置到实战综合的全过程,并针对DC综合工具在安装和运行中常见的报错问题提供了具体的解决方案,帮助数字IC设计初学者快速搭建稳定的EDA学习环境。

weixin_29159441的博客 257

js数组深拷贝_秒懂JavaScript中的深浅拷贝

1、从原理上搞懂深浅拷贝掌握深浅拷贝之前,我们需要简单的介绍一下js中的数据类型。js中的数据类型分为基本数据类型和引用数据类型。基本数据类型是按值操作的,而引用数据类型操作的是其在堆内存中的地址。我大概举个例子:基础数据类型就好像图书馆的每一本书(文史,经济,艺术等这些我们可以对应基础数据类型中的number,string,boolean等),引用数据类型就好像是图书馆里的书籍索引(一般的书籍索...

weixin_39956182的博客 176

Fabric学习笔记(一)- Centos 7下的Fabric 2.3.2环境搭建

一、 环境准备 (一)、在VMware Workstation 15 安装一个Centos 7的虚拟环境,切换到图形化界面: 参考文章链接:Centos 7切换图形化界面 其中可能在yum groupinstall "X Window System"时会报错:Cannot find a valid baseurl for repo: base/7/x86_6,参考这篇文章即可:安装图形化界面报错解决 (二)、打开终端,安装所需的库: 切换root用户,输入命令:su root yum更新,输入命令:y

茕夜 2611

js高级深浅拷贝

原理:用JSON.stringify将对象转成JSON字符串,再用JSON.parse()把字符串解析成对象,一去一来,新的对象产生了,而且对象会开辟新的栈,实现深拷贝。当对象中只有一级属性,没有二级属性的时候,此方法为深拷贝,但是对象中有对象的时候,此方法,在二级属性以后就是浅拷贝。深浅拷贝主要区别在复杂数据类型,对于基本数据类型,没有区别,改变拷贝的数据,都不会改变原数据。浅拷贝只拷贝引用(地址值),当拷贝的新对象发生改变时,原对象也会发生相同的改变,也就是说,:目标对象,即接收源对象属性的对象。

奋斗的小前端 1211

CH7034B显示模块原理图设计,已量产

显示桥接板的价值,不在于简单把 RGB 排线换成另一种接口,而在于能否把并行视频、时钟、显示控制、模拟输出和辅助配置同时组织成稳定系统。当前这张 CH7034B 原理图就是这种思路:U3 CH7034B 作为核心桥接芯片,输入侧是 LCD_R0~R7、LCD_G0~G7、LCD_B0~B7、LCD_DE、LCD_HSYNC、LCD_VSYNC、LCD_CLK 与 LCD_BL,输出侧则通过 DAC0~DAC2 和 DDC_SC/DDC_SD 形成模拟显示接口边界。

不脱发的程序猿 161

【AUTOSAR-E2E】-2.2-配置E2E:基于E2EPW配置一个TX发送的Signal Group(使用E2E Profile 2)

《共13页精讲》:此法也适用于E2E Profile 4/5/6/7/11/22 目录 1 检查CAN Matrix Arxml/DBC是否满足E2E需求 2 在DaVinci Developer中为Port添加E2E保护 3 在DaVinci Configurator settings设置 4 如何使用应用层的E2E保护 5 结尾 <--返回「Autosar_BSW高阶配置」总目录--> <--返回「Autosar_BSW高阶配置」专栏主页--> &lt.

「汽车电子助手」的博客 4218

JavaScript:深浅拷贝

了解深浅拷贝之前必须要先知道js数据类型和存储方式(基本数据类型储存在栈内存,引用类型储存在堆内存中)。

weixin_49549489的博客 150

【Claude】SSL certificate verification 错误:证书校验失败与自定义 CA 配置

获取并验证企业 CA 证书后,需要配置 Claude Code(Node.js)信任该证书。Claude Code 的 SSL 错误通常源于企业代理:不是 Anthropic 服务器的问题Node.js 使用独立的 CA 存储:操作系统信任了企业 CA 不等于 Node.js 也信任NODE_EXTRA_CA_CERTS 是标准解决方案:指向包含企业 CA 的 PEM 文件绝不使用 NODE_TLS_REJECT_UNAUTHORIZED=0:这等于关闭所有 HTTPS 安全验证证书链完整性很重要。

博客 6799

Javascript中的深浅拷贝以及实现方法

Javascript中的深浅拷贝以及实现方法

weixin_74457498的博客 1990

【PINN物理信息网络】基于PINN物理信息网络求解瞬态薛定谔方程(python)

【PINN物理信息网络】基于PINN物理信息网络求解瞬态薛定谔方程(python)

k8291121的博客 2722

CMake是什么?为什么学习CMake

CMake的主要作用和重要性,包括其在跨平台构建中的应用、如何支持多种编译器及操作系统,以及它在管理大型和复杂项目中的优势。

小鱼酱的博客 3866

JavaScript之深浅拷贝

上篇博客中简单介绍了JS中的引用类型,本篇博客就简单介绍下JS的深浅拷贝,以后有时间再对深浅拷贝做个扩展。原始类型是保存在栈内存中的,对于它们的复制可以理解为“真实”复制,即重新开辟栈内存并将原来的值copy一份放进去。那么修改copy的那个值并不会影响原始值,因为它们是独立的。 先看看原始类型和引用类型的存储方式:(图片摘自https://www.cnbl...

feb的博客 465

「JS逆向三百例」JS逆向HIKVISION-视频监控的前端密码加密

本文详细分析了HIKVISION-海康威视监控前端登录过程中密码的加密机制,通过逆向工程解析了其 JavaScript 加密逻辑,重点研究了HIKVISION-海康威视监控的前端密码SHA256加密算法的实现。基于逆向分析结果,使用 Python 模拟了HIKVISION-海康威视监控的登录流程,最终实现了自动化登录功能。本文旨在为安全研究人员提供技术参考,帮助理解前端加密机制,并强调技术研究的合法性和合规性。

布啦啦 1095

js深浅拷贝的理解

js深浅拷贝的理解 说起js的深浅拷贝不得不提起的是js的数据类型 基本数据类型 :undfined string boolean null number 引用数据类型:array object function 基本数据类型存储在栈内存中 变量 值 a 1(栈内存) b (指针) var a=1;var b = a a=3;console.log(a,b)//3,1 ...

weixin_42446516的博客 431

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

JavaScript深浅拷贝

在前端开发中,有时我们需要对一个复杂的数据结构进行变换,例如将一个嵌套的对象转换为数组或将一个数组转换为嵌套的对象。深拷贝是对对象或数组进行递归复制,复制整个对象的所有层次,这样就可以避免对象中的引用类型的属性共享的问题。浅拷贝是对对象或数组进行浅层复制,只复制对象的一层属性,当复制的对象中有引用类型的属性时,复制出来的对象和原对象会共享引用类型的属性。通过展开一个对象,可以将其属性复制到新的对象中。总之,在前端开发中,深拷贝是非常常见的场景,可以帮助我们处理复杂的数据结构,并保持代码的稳定性和可维护性。

码农键盘上的梦 722

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

js高级04-深浅拷贝、防抖节流

举例:比如我们在玩LOL游戏时,当需要回城时,我们触发回城按钮,进入到回城状态进会有一个等待的时间,如果在这个等待时间内有重复去执行回城按钮,这时回城状态并不会做出其他响应,而是等时间到了后才会完成回城。每一级的数据都会拷贝 ,拷贝后,两个对象拥有不同的地址,当拷贝出来的对象发生改变时,原对象内容不会改变,两者互不影响。浅拷贝只拷贝引用(地址值),当拷贝的新对象发生改变时,原对象也会发生相同的改变,也就是说,浅拷贝会影响原来的元素。引用数据类型的特点:存储的是该对象在栈中引用,真实的数据存放在堆内存里。

qq_60060362的博客 969

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

js数组深拷贝_如何快速理解javascript中的深浅拷贝?

最近刷掘金看到axuebin大佬的2020年前端面试复习必读文章【超百篇文章/赠复习导图】 - 掘金,让我受益匪浅。所以决定开始写一些基础文档,提升一下自己,顺便回顾一下原生JS.如果要彻底理解JavaScript的深浅拷贝,必须要知道javascript的数据类型医技JS中数据是如何存储的,下面我逐一介绍:基本数据类型javascript 中的数据类型分为基础数据类型和引用数据类型基础数据类型指...

weixin_39987211的博客 124

js 浅拷贝直接赋值_如何快速理解javascript中的深浅拷贝?

最近刷掘金看到axuebin大佬的2020年前端面试复习必读文章【超百篇文章/赠复习导图】 - 掘金,让我受益匪浅。所以决定开始写一些基础文档,提升一下自己,顺便回顾一下原生JS.如果要彻底理解JavaScript的深浅拷贝,必须要知道javascript的数据类型医技JS中数据是如何存储的,下面我逐一介绍:基本数据类型javascript 中的数据类型分为基础数据类型和引用数据类型基础数据类型指...

weixin_39752828的博客 120

JS专题之深浅拷贝

前言 在开发过程中,偶尔会遇到这种场景,拿到一个数据后,你打算对它进行处理,但是你又希望拷贝一份副本出来,方便数据对比和以后恢复数据。 那么这就涉及到了 JS 中对数据的深浅拷贝问题,所谓深浅拷贝,浅拷贝的意思就是,你只是复制了对象数据的引用,并没有把内存里的值另外复制一份,那么深拷贝就是把值完整地复制一份新的值。 在之前的文章《JS专题之数据类型和类型检测》中我有讲过,JS 中的数据类型分为两种...

weixin_34293902的博客 244

JS知识点总结二———深浅拷贝

本文深入解析了JavaScript中的深拷贝与浅拷贝。浅拷贝仅复制对象的第一层属性,当属性为引用类型时复制的是内存地址(如Object.assign、扩展运算符等方法);深拷贝则递归复制所有层级,创建完全独立的对象(如JSON.parse/stringify、递归实现等)。文章详细对比了两种拷贝方式的实现原理、典型应用场景及各自的局限性,并提供了包含循环引用处理、类型识别和原型链保留的完整深拷贝解决方案。通过掌握这些核心概念,开发者可以更好地处理数据引用问题,避免对象间的意外关联。

不会后端的前端不是一个好全栈 2098

JavaScript——23 深浅拷贝

讲解了JS的深浅拷贝,其中深拷贝用了三种方式实现,包括通过递归实现、cloneDeep方法实现和JSON.stringify()实现。

念头通达 851

JS中的深浅拷贝 总结

深浅拷贝

qq_36065328的博客 311

JS 深浅拷贝

深拷贝与浅拷贝在其它语言中也经常被提及到,在实际项目开发过程中也常常需要区分当前使用的到底是深拷贝还是浅拷贝,有时候在该使用深拷贝的地方,我们使用了浅拷贝,会导致深藏不露的bug。

wu_2004的博客 399

【JS学习】15. JS进阶-深浅拷贝等

首先浅拷贝和深拷贝只针对引用类型浅拷贝:拷贝的是地址如果是简单数据类型拷贝值,引用数据类型拷贝的是地址 (简单理解: 如果是单层对象,没问题,如果有多层就有问题)

now or never 865

JavaScript中的深浅拷贝

JavaScript中深浅拷贝是处理对象复制的关键概念。浅拷贝(如Object.assign或展开运算符)仅复制第一层属性,嵌套对象仍共享引用;深拷贝(如JSON方法或递归实现)会递归复制所有层级,实现完全独立。现代API structuredClone支持复杂类型和循环引用,比传统方法更高效。浅拷贝适合简单数据,深拷贝用于需要完全隔离的场景,但需注意性能开销和特殊类型处理。

2401_87008233的博客 773

JavaScript 深浅拷贝全面解析

在 JavaScript 中,是处理对象复制的重要概念。它们的核心区别在于对的处理方式,理解这一点对避免程序中的意外数据污染至关重要。

七公子77的技术博客 1055
上一篇: Promise的用法
下一篇: JS烟花案例优化版
小小荧
博客等级 码龄9年 133粉丝 92原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值