如何实现对象的深拷贝?方法一:使用JSON(对象的序列化和反序列化)。需要注意的是,在引用数据类型中,地址存放在栈区,属性值存放在堆区。不同的地址指向的值是不同的。同理,这里是深拷贝的写法,变量地址互不影响,所以obj==obj1为false,而浅拷贝为true,因为obj会同时把地址一起赋值给obj1的赋值,让他们的地址在堆区指向同一个值//如何实现对象的深拷贝?//第一种方法//对象序列化//创建一个对象varobj={name:'zhangsan',age:13}//因为是深拷贝//序列化反序列化后将obj赋给一个对象obj1varobj1=JSON.parse(JSON.stringify(obj));console.log(JSON.stringify(obj),typeofJSON.stringify(obj));//stringconsole.log(obj1,typeofobj1);//{name:'zhangsan',age:13}objectconsole.log(obj==obj1);//false//因为反序列化后obj1的引用地址发生了变化console.log(obj===obj1);//false//改变obj1中的name属性obj1.name='lisi';//打印出来的obj的name属性没有改变//验证深拷贝只作用于栈区,栈中的变量区域独立存在,值转换不会相互影响console.log(obj,obj1);//{name:'zhangsan',age:13}{name:'lisi',age:13}方法二:第三方库lodash的cloneDeepLo??dash是一个一致的、模块化的、高性能的JavaScript实用库。要使用lodash标签库,首先要导入lodash,在终端当前目录下执行命令npmi--savelodash//第二种方法//第三方库lodash的cloneDeep//lodash经常使用_todefinevar_=require('lodash');//创建对象varobj={name:'zhangsan',age:18}//使用cloneDeep方法cloneDeep相当于clone,是递归复制(我不是很懂这个,不过是这样用的)varobj2=_.cloneDeep(obj);//也把obj2的name属性改一下obj2.age=20;//打印出obj和obj2,找到只有obj2的名称属性值发生了变化。原理和方法同console.log(obj);//{name:'zhangsan',age:18}console.log(obj2);//{name:'zhangsan',age:20}方法三:Object.assign()实现深拷贝//Object.assign(obj1,obj2);两个参数实现对象复制,复制第一个参数是目标对象letobj1={}letobj2={name:'xxx',age:22}//两个参数实现对象复制,复制第一个参数obj1是targetobject//将obj2中的内容复制到obj1对象中,并返回obj1对象letres1=Object.assign(obj1,obj2);console.log(res1);//{name:'xxx',age:22}console.log(obj1);//{name:'xxx',age:22}obj1.name='小仙女'console.log(obj2);//{name:'xxx',age:22}//name没有变,证明是深拷贝obj2.name='快乐超人'console.log(obj1);//{name:'小仙女',age:22}//没有变化//深拷贝,指向堆区的值不一样console.log(obj1===obj2);//false方法4:使用扩展运算符...实现深拷贝//使用扩展运算符...实现深拷贝letobj1={name:'tom',age:13}//使用右侧toexpandletobj2={//将obj1对象拆分为键值对...obj1,//添加属性gender:'male'}console.log(obj2);//{name:'tom',age:13,gender:'male'}obj1.name='Makabaka'console.log(obj2);//{name:'tom',age:13,gender:'male'}//nochangeverificationisadeepcopyconsole.log(obj1===obj2);//false我也知道jquery中使用递归、增强for、继承方法的深拷贝,但是我不知道。..方法很多,有待更新,,,,,,,,分享一篇无意中看到的关于深拷贝和浅拷贝的博客,总结的非常通俗易懂,很强大https://segmentfault.com/a/11...
