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

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

  关于深拷贝

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

  关于深拷贝

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

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

 

相关文章:

  • 2021-10-11
  • 2022-12-23
  • 2022-12-23
  • 2021-07-31
  • 2021-06-30
  • 2021-09-15
  • 2021-12-14
猜你喜欢
  • 2022-12-23
  • 2021-08-19
  • 2021-10-12
  • 2021-06-29
  • 2022-12-23
  • 2022-12-23
  • 2021-07-31
相关资源
相似解决方案