摘要:本文解释中深拷贝和浅拷贝的区别。深拷贝深拷贝指递归的复制对象的属性给新对象。有些时候一层的深拷贝被认为是浅拷贝,比如的值是一个对象,浅拷贝出来的新对象直接引用了原对象的对象,所以也会相互影响的。
本文解释javascript中深拷贝和浅拷贝的区别。
浅拷贝/Shallow Copy浅拷贝指拷贝了引用值。
var original = {"prop1" : "Prop1", "prop2" : "prop2"}; console.log(JSON.stringify(original)); // {"prop1" : "Prop1", "prop2" : "prop2"} var shallowCopy = original; console.log(JSON.stringify(shallowCopy)); // {"prop1" : "Prop1", "prop2" : "prop2"} shallowCopy.prop1 = "ChangedProp1"; console.log(JSON.stringify(original)); // {"prop1" : "ChangedProp1", "prop2" : "prop2"} console.log(JSON.stringify(shallowCopy)); // {"prop1" : "ChangedProp1", "prop2" : "prop2"}
https://smoothprogramming.com...
注意:
浅拷贝中,原始值和副本共享同样的属性。
浅拷贝只拷贝了对象引用。
浅拷贝中如果修改了拷贝对象会影响到原始对象,反之亦然。
js中,数组和对象的赋值默认为浅拷贝。
深拷贝/Deep Copy深拷贝指递归的复制对象的属性给新对象。jquery中我们使用$.extend去进行深拷贝。
$.extend(deepCopy, target, object1, [objectN] )
第一个参数传入true,指明此为深拷贝,target为目标对象,object1,原对象。
var original = {"prop1" : "Prop1", "prop2" : "prop2"}; console.log(JSON.stringify(original)); // {"prop1" : "Prop1", "prop2" : "prop2"} var deepCopy = $.extend(true, {}, original); console.log(JSON.stringify(deepCopy)); // {"prop1" : "Prop1", "prop2" : "prop2"} deepCopy.prop1 = "ChangedProp1"; console.log(JSON.stringify(original)); // {"prop1" : "Prop1", "prop2" : "prop2"} console.log(JSON.stringify(deepCopy)); // {"prop1" : "ChangedProp1", "prop2" : "prop2"}
https://smoothprogramming.com...
注意:
深拷贝中,副本和原对象不共享属性
深拷贝递归的复制属性
深拷贝的副本不会影响到原对象,反之亦然
js中所有的原始数据类型默认执行深拷贝,比如Boolean, null, Undefined, Number,String等
译者注:
实际工作中,通常所谓clone一个对象一般都是指深拷贝,即拷贝一个对象的副本。
有些时候一层的深拷贝被认为是浅拷贝,比如shallowCopy({a:1,b:{hello:"world}}),b的值是一个对象,浅拷贝出来的新对象直接引用了原对象的value对象,所以也会相互影响的。
实际工作中,深拷贝(递归的对对象里每一层值和对象进行拷贝)应用很广泛,我认为浅拷贝只变成了一种概念,因为每一个需要clone的地方都是深拷贝。
复制一个副本对象也可以通过工厂函数,比如vuejs里的data。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/98407.html
摘要:接下来就让我们更细致的探究中的深浅拷贝。总结以上对深拷贝和浅拷贝做了简单的介绍,在深拷贝的实现上也只介绍了最简单的实现形式,并未考虑复杂情况以及相应优化,想要对深拷贝有更深入的了解,需要大家花时间去深入研究,或者可以关注我后续文章的动态。 对象和数组的拷贝对我来说一直都是一个比较模糊的概念,一直有点一知半解,但是在实际工作中又偶尔会涉及到,有时候还会一不小心掉坑里,不知道大家有没有同样...
摘要:深拷贝和浅拷贝的区别背景最近在用框架写页面,赋值给中的对象时会出现一个问题,赋值和被赋值对象之中任何一个有变化,另一个也会随之变化。 深拷贝和浅拷贝的区别 背景:最近在用vue框架写页面,赋值给Vue.$data中的对象时会出现一个问题,赋值和被赋值对象之中任何一个有变化,另一个也会随之变化。例如: var b = { foo: 123 }; var vm = new Vue(...
摘要:参考链接浅拷贝最简单的浅拷贝就赋值。所谓的浅拷贝就是,后面的对象和前面的对象在第一层数据结构中指向同一个堆地址。但是如果前面的数据不止有一层,如此时,使用和方式实现的都是浅拷贝。深拷贝管你怎么变,互不影响。 参考链接:http://www.cnblogs.com/st-les...https://blog.csdn.net/hj7jay/... 浅拷贝: 1.最简单的浅拷贝就赋值。由于...
摘要:深拷贝和浅拷贝问题的本质还是不同数据类型的存储方式差异,尤其是引用数据类型的特殊。 深拷贝和浅拷贝问题的本质还是不同数据类型的存储方式差异,尤其是引用数据类型的特殊。showImg(https://segmentfault.com/img/bVbb8XH?w=1058&h=409); 现分别对赋值、浅拷贝、深拷贝做深入研究: 1.赋值 原理:直接将对象指针直接赋值给另一个变量 代码: ...
阅读 1469·2023-04-26 00:08
阅读 801·2021-11-23 18:51
阅读 1675·2021-11-12 10:34
阅读 1010·2021-10-14 09:43
阅读 505·2021-08-18 10:23
阅读 2583·2019-08-30 15:55
阅读 3394·2019-08-30 11:05
阅读 2795·2019-08-29 12:50