关于深拷贝

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

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

  

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

  

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

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

原文地址:https://www.cnblogs.com/zhangnan35/p/8638522.html