这种方式实现深拷贝十分简单,我在开发中也经常使用,不过这种方式实现深拷贝有以下缺点:无法处理循环引用...
浅拷贝: 指拷贝对象的时候,只对第一层键值对进行独立的复制,如果对象里还是对象,就只能复制嵌套对象的地址。 **深拷贝:**指的是复制对象的时候完全拷贝一份对象,就算嵌套了对象也相互分离,深拷贝处理后的对象修改对象属性的时候只会影响这个对象本身,不会影响另一个。 2 实现数组浅拷贝的几种方法 【1】Array.c...
*/constjsonObject=JSON.parse(JSON.stringify(originObject))// 修改深拷贝的对象,原对象的值并不会改变jsonObject.A='hahah'console.log(originObject)console.log(jsonObject)console.log(jsonObject.name)// undefinedconsole.log(jsonObject.type)// undefinedjsonObject.speak()// 报错 jsonObject.speak is no...
1)深复制在计算机中开辟了一块内存地址用于存放复制的对象, 2)而浅复制仅仅是指向被复制的内存地址,如果原地址中对象被改变了,那么浅复制出来的对象也会相应改变。 所谓的浅复制,只是拷贝了基本类型的数据,而引用类型数据,复制后也是会发生引用,我们把这种拷贝叫做“(浅复制)浅拷贝”。 看例子: varjson1={"a":...
与原始对象没有联系。手写深拷贝函数则需要处理对象和数组的循环引用问题,并使用工具函数检测数据类型、判断是否为数组或对象,以及遍历对象。总结,深浅拷贝在处理JavaScript引用类型数据时至关重要。理解它们的区别以及如何实现它们,将有助于避免数据污染和性能问题,确保代码的正确性和效率。
浅拷贝:只拷贝数组或者对象的引用,无论在新的或者旧的数组或者对象中作了修改,两者都会发生变化,即两个指向的地址是同一块。 深拷贝:这种拷贝使两者分离,修改一个对象的属性,另外一个也不会有影响,即深拷贝会把所有东西重新复制一份放在另一个地方,两者指向的不是同一块地址。
JS 深拷贝常用方法 1. 递归法 优点: 判断拷贝的要进行深拷贝的是数组还是对象,是数组的话进行数组拷贝,对象的话进行对象拷贝 缺点:进行深拷贝的不能为空,并且是对象 functioncloneDeep(obj) { varobjClone=Array.isArray(obj)?[] : {}; if(obj&&typeofobj==="object") {...
浅拷贝是拷贝一层,如果数据是基本数据类型,会拷贝其本身,如果除了基本数据类型之外还有一层对象,那么只能拷贝其引用,对象的改变会反应到拷贝对象上。 深拷贝是拷贝多层,每一层的数据都会拷贝出来,对象的改变不会影响拷贝对象。 二、实现 1、实现浅拷贝