关于深拷贝

Posted 陌上兮月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于深拷贝相关的知识,希望对你有一定的参考价值。

  我们都知道在js中,变量分为值类型和引用类型,对于值类型来说,它在赋值是一种传值赋值,即直接原原本本拷贝一份;而对于引用类型(对象、数组、函数)来说,由于体积较大,它们在赋值时是一种传址赋值,也就是说,仅仅把一个指向引用类型的指针复制过去,这是一种浅拷贝;而要真正地拷贝引用类型本身,就要用到深拷贝。

  我在阮一峰的博客里,看到了关于他对于深拷贝的定义:

  

  我们在实际的开发中,对象和数组通常会用于存储一些数据,如数字、字符串、布尔值、undefined、null等等。而至于方法的书写,通常会统一写在比如类似methods这样的方法属性中。如果不同的模块需要进行方法共用,你可以再写多一遍,也可以把这个方法定义为全局方法,但不会把这个方法作为一个数据去传输它。

  

  在控制台打印一下就会发现,JSON本来也就没有打算把方法作为一个数据去传输。

  说了这么多,就是想说当遇到深拷贝的时候,常用的一种方法是JSON.parse(JSON.stringify())。这种方法如果对象属性值为function,它会自动跳过。而这并不能称为是它的一个弊端,因为它也顺应了这个行业的默认规则。所以目前来说用它来实现深拷贝仍然是完美的。

 

以上是关于关于深拷贝的主要内容,如果未能解决你的问题,请参考以下文章

关于深拷贝与浅拷贝

关于深拷贝

关于Python中深拷贝与浅拷贝的理解---概念

iOS 关于数组深拷贝 initWithArray:copyItems: 方法的讨论

JS: 关于深拷贝和浅拷贝

JavaScript数组对象的浅拷贝与深拷贝深浅拷贝的区别+图解原理