1:Object.assign() 2:JSON.stringify和JSON.parse 3:递归的方式实现对象的深拷贝 ①Object.assign() letobj1={CnName:"姓名1",childZi:{EnName:"name1"}}letobj2=Object.assign({},obj1);obj2.CnName="姓名2";obj2.childZi.EnName="name2";console.log("obj1",obj1);console.log("obj2",obj2...
例(4)的代码在这里只是做个比较。浅拷贝 浅拷贝则比赋值多了一层,把对象的值复制一份赋给一个新变量。当对象里的属性值是基础数据类型时,其中一个对象改变属性值,另一个对象不会受到影响;但是当对象里的属性值是引用数据类型时,那么这里面的引用数据类型就会是联动的,其中一个对象改变属性值,另一个对象...
1. 项目中自己写的代码: functiondeepCopy(obj) {//深拷贝returnJSON.parse(JSON.stringify(obj)) } 2. 收集的网友代码: functiondeepCopy(data) {//深拷贝方法一 let vv=nullif(typeofdata == 'object' && data !==null) { vv= data.constructor === Array ?[] : {}for(let vindata) { vv[v]...
浅度拷贝:复制一层对象的属性,并不包括对象里面的为引用类型的数据,当改变拷贝的对象里面的引用类型时,源对象也会改变。 深度拷贝:重新开辟一个内存空间,需要递归拷贝对象里的引用,直到子属性都为基本类型。两个对象对应两个不同的地址,修改一个对象的属性,不会改变另一个对象的属性。 数据的类型: 一般数据(值传...
所以说, obj 和 clone 指向的都是同一块内容,不管谁改了对象的内容,别人再访问都是改过之后的了。 所以这不是我们想要的,我不想共用,我想要属于自己的一片天地,我命由我不由你,所以这就需要浅拷贝和深拷贝了。 简单补充: 像一些基本数据类型的变量(Number Boolean String undefined null)被赋值时会直接在栈...
一.深拷贝和浅拷贝的区别 浅拷贝(shallow copy):只复制指向某个对象的指针,而不复制这个对象本身,新旧对象共享一块内存。 深拷贝(deep copy):复制并创建一个一模一样的对象,不共享内存,修改新对象旧对象不会变。 如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也...
深拷贝:把复制的对象所引用的全部对象都复制一遍。 1. 浅拷贝的实现 浅拷贝的实现方法比较简单,只要使用是简单的复制语句即可。 1.1 方法一:简单的复制语句 /* === 浅拷贝 === */functionsimpleClone(initalObj){varobj={};for(variininitalObj){obj[i]=initalObj[i];}returnobj;}/* === 客户端调用...
深拷贝:拷贝原始对象的所有的属性,并拷贝属性指向的动态分配的内存,深拷贝新旧对象不共享内存,修改新对象不会改到原对象。 JSON.parse(JSON.stringify(object)) leta={age:1,jobs:{first:'FE'}}letb=JSON.parse(JSON.stringify(a))a.jobs.first='native'console.log(b.jobs.first)// FE ...
我们可以得出,基本数据类型中,复制一个对象,会在栈中开辟一块新内存,改变其中一个对象另一个对象不会受影响;但是这不是深拷贝,深拷贝只针对较为复杂的object数据类型; b.引用数据类型--属性名存在栈内存中,属性值存在于堆内存中,但是栈内存会提供一个引用的地址指向堆内存中的值,我们以上面浅拷贝的例子画个图...