concat是深拷贝还是浅拷贝(解构赋值是深拷贝还是浅拷贝)

2024-10-09 06:55:54 2

concat是深拷贝还是浅拷贝(解构赋值是深拷贝还是浅拷贝)

其实concat是深拷贝还是浅拷贝的问题并不复杂,但是又很多的朋友都不太了解解构赋值是深拷贝还是浅拷贝,因此呢,今天小编就来为大家分享concat是深拷贝还是浅拷贝的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

本文目录

解构赋值是深拷贝还是浅拷贝

深拷贝:修改新变量的值不会影响原有变量的值。默认情况下基本数据类型都是深拷贝。 浅拷贝:修改新变量的值会影响原有的变量的值。默认情况下引用类型都是浅拷贝。 ES6的新特性,按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为 解构 。具体操作本文章不做描述。 那么我们在使用解构赋值的时候,到底是深拷贝还是浅拷贝呢?我们可以通过以下的例子得出结论: 输出 以上例子中,我们从对象a中解构赋值了name、age、marriage、addr四个变量,分别是 string 、 number 、 boolean 、 object 类型。改变这四个变量的值后,再与a原来的值作对比,我们发现a的name,age,marriage属性没有改变,而addr属性发生了改变。由此可以得出结论,解构赋值对object类型只是浅拷贝。 实际上,无论是使用扩展运算符(...)还是解构赋值,对于引用类型都是浅拷贝。所以在使用splice()、concat()、...对数组拷贝时,只有当数组内部属性值不是引用类型是,才能实现深拷贝。

JSON对象实现深度克隆

JSON 是 ecma5新定义的对象,你要在 现代浏览器中才能有,如果你用ie6这样的浏览器就找不到,这个是先检查有没有JSON这个对象有的话就用这个对象深拷贝,没有的话自己实现,你这个自己实现的方法,不是深度拷贝,而是浅拷贝

彻底讲明白浅拷贝与深拷贝

数据分为基本数据类型(String, Number, Boolean, Null, Undefined,Symbol)和对象数据类型。

1、基本数据类型的特点:直接存储在栈(stack)中的数据

2、引用数据类型的特点: 存储的是该对象在栈中引用,真实的数据存放在堆内存里

引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。

深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型的

深拷贝和浅拷贝的示意图大致如下:

浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。

当我们把一个对象赋值给一个新的变量时, 赋的其实是该对象的在栈中的地址,而不是堆中的数据 。也就是两个对象指向的是同一个存储空间,无论哪个对象发生改变,其实都是改变的存储空间的内容,因此,两个对象是联动的。

浅拷贝是按位拷贝对象, 它会创建一个新对象 ,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值;如果属性是内存地址(引用类型),拷贝的就是内存地址 ,因此如果其中一个对象改变了这个地址,就会影响到另一个对象。即默认拷贝构造函数只是对对象进行浅拷贝复制(逐个成员依次拷贝),即只复制对象空间而不复制资源。

我们先来看两个例子,对比赋值与浅拷贝会对原对象带来哪些改变?

上面例子中,obj1是原始数据,obj2是赋值操作得到,而obj3浅拷贝得到。我们可以很清晰看到对原始数据的影响,具体请看下表:

Object.assign() 方法可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象。但是 Object.assign() 进行的是浅拷贝,拷贝的是对象的属性的引用,而不是对象本身。

注意:当object只有一层的时候,是深拷贝

修改新对象会改到原对象:

同样修改新对象会改到原对象:

关于Array的slice和concat方法的补充说明:Array的slice和concat方法不修改原数组,只会返回一个浅复制了原数组中的元素的一个新数组。

原数组的元素会按照下述规则拷贝:

可能这段话晦涩难懂,我们举个例子,将上面的例子小作修改:

原理: 用JSON.stringify将对象转成JSON字符串,再用JSON.parse()把字符串解析成对象,一去一来,新的对象产生了,而且对象会开辟新的栈,实现深拷贝。

这种方法虽然可以实现数组或对象深拷贝,但不能处理函数。

这是因为 JSON.stringify() 方法是将一个JavaScript值(对象或者数组)转换为一个 JSON字符串,不能接受函数。

递归方法实现深度克隆原理: 遍历对象、数组直到里边都是基本数据类型,然后再去复制,就是深度拷贝。

该函数库也有提供 _.cloneDeep 用来做 Deep Copy。

阅读原文

看完文章留完言,还有福利拿,往下看 感兴趣的小伙伴可以在公号【grain先森】后台回复【190313】获取HTML5详解、CSS3详解和Vue详解及实战项目,可以转发朋友圈和你的朋友分享哦。

字符串和数组的操作方法

字符串: 通过 " " 或 ’ ’ 都可以表示字符串,字符串就是普通的文本值,引号中可以写任意字符,引号中的字符仅代表它的字面意思,不表示其他。 字符串的属性: 字符串特点与数组有些相似,字符在字符串中的排列也是有序且连续的. length: 只读属性,会得到一个number类型的值,表示字符串中字符长度(不区分中英文) 可以通过循环遍历字符(字符索引同样从0开始递增+1,最大索引是length-1)。

注意: 字符串是基础数据类型,无法通过为指定下标位置重新赋值来更换字符串中的字符。(字符串的所有操作,都不是对字符串本身操作,都是对字符串的拷贝进行的操作)

注意: 所有的字符串操作方法都不会对调用方法的字符串产生影响,全都是生成了新的字符串。

操作方法:

字符串没有删除字符串的操作方法,如果要删除字符串中的字符,思路就是将要删除的字符替换成空字符串。

10.str.toLowerCase():将字符串转化成小写

数组: 属于object类型,是一个连续且有序可存储多个值的数据结构(容器)。 1、如何声明一个数组

2、length属性,数组的length属性是一个只读属性,值是number类型,表示数组中存放数据的数量(也称数组长度)。

3、元素与索引 元素: 数组中存储的值都称为是数组的元素。 索引:数组元素在数组中的位置用索引表示,索引是从0开始递增的整数。(元素索引值最小是:0,最大是:数组长度-1) 通过索引可以读取数组中与索引位置对应的元素的值。

当读取的索引值超过了索引范围(数组越界),不会报错,会得到undefined

同样可以通过给数组取索引赋值的形式向数组中添加元素,要注意索引的连续性。

可以利用for循环来遍历数组元素(依次访问)

数组的赋值操作(拷贝操作)

number、string、boolean都属于基础数据类型,基础数据类型在进行赋值的时候,是将一个变量的值的拷贝赋值给另一个变量。

深拷贝

object属于引用类型,引用类型在进行赋值的时候,是将值在内存中的地址赋值给了另一个变量,因此两个变量共同指向同一个内存地址。

浅拷贝

基础数据类型比较的是值(字面值)

引用类型比较的是内存地址是否相同,并不会比较字面值。 不存在完全相同的两个对象

数组的属性和操作方法 属性:length, number类型,只读,表示数组元素的个数(数组长度) 操作方法:

(1)添加:第二个参数是0,并且有第三个参数

(2)替换:第二个参数大于0,并且有第三个参数

(3)删除:第二个参数大于0,并且没有第三个参数

未知长度的数组,需要将除了第一个以外的其他元素都删除 (1) 通过循环多次调用pop()

(2) 通过splice删除指定位置的元素

6.indexOf():判断括号中的值是否是数组的元素,如果是将得到元素的索引,如果不是将得到-1。(不会影响原数组) 场景:水果列表中是否包含’牛油果’?

7.concat():合并多个数组(不会影响原数组)

8.slice():对数组进行截取(不会影响原数组) 参数: 第一个参数:设置开始截取的位置 第二个参数:设置结束截取的位置,截取内容不包含结束位置的元素。当结束位置超过数组长度,只会截取到数组末尾,不会报错。

2018WEB前端JavaScript里的深浅拷贝

Javascript有五种基本数据类型(也就是简单数据类型),它们分别是:Undefined,Null,Boolean,Number和String。还含有一种复杂数据类型,就是对象注意Undefined和Null的区别,Undefined类型只有一个值,就是undefined,Null类型也只有一个值,也就是null Undefined其实就是已声明未赋值的变量输出的结果 null其实就是一个不存在的对象的结果var c;console.log(c)//undefinedconsole.log(document.getElementById(’wsscat’))//没有id为wsscat的节点,输出null1234简单的数据类型和复杂的数据类型有以下重要的区别对于简单数据类型它们值在占据了内存中固定大小的空间,并被保存在栈内存中。当一个变量向另一个变量复制基本类型的值,会创建这个值的一个副本,还有就是不能给基本数据类型的值添加属性var a = 1;var b = a;a.attr = ’wsscat’;console.log(a.attr)//undefined上面代码中a就是简单数据类型(Number),b就是a的副本,它们两者都占有不同位置但相等的内存空间对于复杂的数据类型复杂的数据类型即引用类型,它的值是对象,保存在堆内存中,包含引用类型值的变量实际上包含的并不是对象本身,而是一个指向该对象的指针。从一个变量向另一个变量复制引用类型的值,复制的其实是指针,因此两个变量最终都指向同一个对象。var obj = {name:’wsscat’,age:0} var obj2 = obj;obj2 = 5;console.log(obj);//Object {name: "wsscat", age: 0, c: 5}console.log(obj2);////Object {name: "wsscat", age: 0, c: 5}我们可以看到obj赋值给obj2后,当我们更改其中一个对象的属性值,两个对象都发生了改变,究其原因局势因为obj和obj2这两个变量都指向同一个指针,赋值只是复制了指针,所以当我们改变其中一个的值就会影响另外一个变量的值浅拷贝其实这段代码就是浅拷贝,有时候我们只是想备份数组,但是只是简单让它赋给一个变量,改变其中一个,另外一个就紧跟着改变,但很多时候这不是我们想要的var obj = {name:’wsscat’,age:0} var obj2 = obj;obj2 = 5;console.log(obj);//Object {name: "wsscat", age: 0, c: 5}console.log(obj2);////Object {name: "wsscat", age: 0, c: 5}深拷贝数组 对于数组我们可以使用slice()和concat()方法来解决上面的问题 silcevar arr = ; var arrCopy = arr.slice(0);arrCopy = ’tacssw’console.log(arr)//concatvar arr = ; var arrCopy = arr.concat();arrCopy = ’tacssw’console.log(arr)//对象 对象我们可以定义一个新的对象并遍历新的属性上去实现深拷贝var obj = { name:’wsscat’, age:0} var obj2 = new Object();obj2.name = obj.name;obj2.age = obj.ageobj.name = ’autumns’; console.log(obj);//Object {name: "autumns", age: 0} console.log(obj2);//Object {name: "wsscat", age: 0}当然我们可以封装好一个方法来处理对象的深拷贝,代码如下var obj = {name: ’wsscat’,age: 0} var deepCopy = function(source) {var result = {}; for(var key in source) { if(typeof source === ’object’) {result)} else {result}} return result;} var obj3 = deepCopy(obj)obj.name = ’autumns’;console.log(obj);//Object {name: "autumns", age: 0}console.log(obj3);//Object {name: "wsscat", age: 0}

关于concat是深拷贝还是浅拷贝和解构赋值是深拷贝还是浅拷贝的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

concat是深拷贝还是浅拷贝(解构赋值是深拷贝还是浅拷贝)

本文编辑:admin

更多文章:


俄罗斯战争电影(好看的俄罗斯战争电影有哪些)

俄罗斯战争电影(好看的俄罗斯战争电影有哪些)

其实俄罗斯战争电影的问题并不复杂,但是又很多的朋友都不太了解好看的俄罗斯战争电影有哪些,因此呢,今天小编就来为大家分享俄罗斯战争电影的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录好看的俄罗斯战争电影有哪些俄罗斯

2024年6月29日 08:46

电视上的TV和AV各是什么?ledtv电视是什么牌子

电视上的TV和AV各是什么?ledtv电视是什么牌子

大家好,如果您还对tv电视不太了解,没有关系,今天就由本站为大家分享tv电视的知识,包括电视上的TV和AV各是什么的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录电视上的TV和AV各是什么ledtv电视是什么牌子f

2024年6月13日 14:08

云集微店官网(云集微店广告机怎么下载软件)

云集微店官网(云集微店广告机怎么下载软件)

本篇文章给大家谈谈云集微店官网,以及云集微店广告机怎么下载软件对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录云集微店广告机怎么下载软件云集

2024年8月2日 17:15

photoshop在线版(photoshop网页版免费使用的官网是哪个网址的要正宗的官网的哦!)

photoshop在线版(photoshop网页版免费使用的官网是哪个网址的要正宗的官网的哦!)

本篇文章给大家谈谈photoshop在线版,以及photoshop网页版免费使用的官网是哪个网址的要正宗的官网的哦!对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录photoshop网页版免费使用的官网是哪个网址的要正宗的官网

2024年7月27日 09:15

wps文字下载安装(wps2016如何下载安装步骤)

wps文字下载安装(wps2016如何下载安装步骤)

大家好,今天小编来为大家解答以下的问题,关于wps文字下载安装,wps2016如何下载安装步骤这个很多人还不知道,现在让我们一起来看看吧!本文目录wps2016如何下载安装步骤怎样安装wps字体电脑怎么下载wps软件并安装请问wps里的字体

2024年7月9日 09:31

清风复古传奇怎么到了27级升不动了?清风传奇1.76网站多少

清风复古传奇怎么到了27级升不动了?清风传奇1.76网站多少

本文目录清风复古传奇怎么到了27级升不动了清风传奇1.76网站多少仿盛大清风传奇1.76网站多少清风传奇怎么升级,新开迷失超变传奇,买马玉兔现传世十大家族排行是怎么《天净沙·秋》这首诗,作者是用哪六种景物来渲染秋曰黄昏的萧瑟冷寂的呢“清风徐

2024年5月28日 07:51

大卡车模拟器2(大卡车模拟器2汉化版怎么考驾照7)

大卡车模拟器2(大卡车模拟器2汉化版怎么考驾照7)

今天给各位分享大卡车模拟器2汉化版怎么考驾照7的知识,其中也会对大卡车模拟器2汉化版怎么考驾照7进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录大卡车模拟器2汉化版怎么考驾照7大卡车模拟器2驾照6关怎么过大卡车

2024年4月21日 08:55

app自动化测试工具有哪些(有哪些自动化测试的软件开发质量管理平台)

app自动化测试工具有哪些(有哪些自动化测试的软件开发质量管理平台)

本文目录有哪些自动化测试的软件开发质量管理平台软件测试需要学什么主流测试工具软件测试初学者应用最多的工具有哪些目前网上比较流行的自动化测试框架和软件有哪些如何做好app的测试工作测试流程中都包含哪些方面软件测试中自动化测试要更多的代替手动测

2024年7月24日 12:19

txt文件阅读器(什么手机软件可以阅读.TXT的文件)

txt文件阅读器(什么手机软件可以阅读.TXT的文件)

本篇文章给大家谈谈txt文件阅读器,以及什么手机软件可以阅读.TXT的文件对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录什么手机软件可以阅读.TXT的文件txt小说阅读器怎么导出成文件安卓系统一般有什么阅读器看TXT求可以直

2024年10月12日 08:00

租房子app哪个好(租房子app哪个好)

租房子app哪个好(租房子app哪个好)

各位老铁们,大家好,今天由我来为大家分享租房子app哪个好,以及租房子app哪个好的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录租房子app哪个好

2024年7月11日 19:02

qq手机令牌下载(手机怎样下载QQ手机令牌)

qq手机令牌下载(手机怎样下载QQ手机令牌)

本篇文章给大家谈谈qq手机令牌下载,以及手机怎样下载QQ手机令牌对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录手机怎样下载QQ手机令牌QQ手机令牌在哪里看啊怎么能把QQ的手机令牌下载到电脑上手机QQ安全令牌1.0在哪下载,求

2024年9月3日 11:30

为什么有的老师不建议练瘦金体?范笑歌瘦金体能不能称为当今第一瘦金

为什么有的老师不建议练瘦金体?范笑歌瘦金体能不能称为当今第一瘦金

本文目录为什么有的老师不建议练瘦金体范笑歌瘦金体能不能称为当今第一瘦金初练瘦金体用什么笔、字帖宋徽宗赵佶的瘦金体能不能学该怎么学宋徽宗的瘦金体为何不称为宋体或赵体瘦金体的意思是什么练字练行楷好还是瘦金好宋徽宗的瘦金体书法,“瘦”是指字,“金

2024年6月4日 15:07

多媒体教学系统(多媒体网络教学系统可分为哪两种类型)

多媒体教学系统(多媒体网络教学系统可分为哪两种类型)

本文目录多媒体网络教学系统可分为哪两种类型多媒体系统教学的前景趋势为什么会越来越好多媒体教学系统的优缺点是什么什么是交互式多媒体教学系统什么是教学多媒体体验系统多媒体教学系统怎么解除屏控多媒体互动教学系统的功能特点多媒体网络教学系统可分为哪

2024年6月14日 23:17

电脑显卡排行榜(独立显卡型号排行)

电脑显卡排行榜(独立显卡型号排行)

大家好,关于电脑显卡排行榜很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于独立显卡型号排行的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文目录独立显卡型号排

2024年3月31日 07:22

安卓手机加密(安卓手机加密的方法)

安卓手机加密(安卓手机加密的方法)

本文目录安卓手机加密的方法怎么给安卓手机短信加密如何为安卓手机文件加密在安卓手机环境下怎么加密文件安卓手机视频怎么加密安卓手机应用加密能防偷窥与窃听吗安卓手机怎么对文件夹加密过年邻居小孩子经常借手机玩,安卓手机能把APP隐藏或者加密吗安卓手

2024年7月7日 05:44

电脑经典单机游戏排行(世界范围内销量最高的单机游戏top10,都是经典,你玩过几部)

电脑经典单机游戏排行(世界范围内销量最高的单机游戏top10,都是经典,你玩过几部)

这篇文章给大家聊聊关于电脑经典单机游戏排行,以及世界范围内销量最高的单机游戏top10,都是经典,你玩过几部对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录世界范围内销量最高的单机游戏top10,都是经典,你玩过几部pc十大必

2024年7月1日 09:07

换装游戏大全免费下载(十大热门公主类游戏大全2022)

换装游戏大全免费下载(十大热门公主类游戏大全2022)

其实换装游戏大全免费下载的问题并不复杂,但是又很多的朋友都不太了解十大热门公主类游戏大全2022,因此呢,今天小编就来为大家分享换装游戏大全免费下载的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录十大热门公主类游

2024年7月1日 01:10

冰壶比赛中,后手领先2分,为什么不把对手的每一只壶都打走?冰壶游戏真的配得上奥林匹克么

冰壶比赛中,后手领先2分,为什么不把对手的每一只壶都打走?冰壶游戏真的配得上奥林匹克么

本文目录冰壶比赛中,后手领先2分,为什么不把对手的每一只壶都打走冰壶游戏真的配得上奥林匹克么为什么物体具有惯性冰壶比赛中,后手领先2分,为什么不把对手的每一只壶都打走在冰壶的比赛中我们有一条很重要的规则就是五球保护规则。冰壶比赛中有一条重要

2024年5月11日 02:16

内地能上BBC learning English网吗?怎么听bbc广播

内地能上BBC learning English网吗?怎么听bbc广播

本篇文章给大家谈谈bbc官网,以及内地能上BBC learning English网吗对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录内地能上BBC learning English网吗怎么听bbc广播bbc在线收听的网址有谁

2024年4月6日 02:05

万能钥匙wifi自动解锁(万能钥匙自动连接wifi怎么解密)

万能钥匙wifi自动解锁(万能钥匙自动连接wifi怎么解密)

今天给各位分享万能钥匙自动连接wifi怎么解密的知识,其中也会对万能钥匙自动连接wifi怎么解密进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录万能钥匙自动连接wifi怎么解密万能钥匙破不开的WIFI怎么办啊下

2024年6月25日 13:06

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2342
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1735
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1168
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1164
标签列表

热门搜索