Karam
Articles61
Tags43
Categories13
深拷贝和浅拷贝及实现

深拷贝和浅拷贝及实现

基本类型和引用类型的区别

内存分区:
内存分为五个区:栈,堆,自由存储区,全局静态区,只读区

只看栈和堆分区

JS基本类型有:Number,String,null, undefined, boolean
引用类型有:Object, Array, Function,Date

深拷贝和浅拷贝

基本数据类型名和值都存储在栈中,复制的时候会新开辟一段内存,所以不会对原来的数据有影响,所以称为深拷贝
引用数据类型的名存储在栈中,而值存在堆中,栈中存的是值的地址,复制的时候会把地址传递给其他变量,所以称为浅拷贝

浅拷贝实现方式:

  • 使用for…in可以只拷贝一层,也称为浅拷贝
  • 使用Object.assign()实现浅拷贝
  • 直接使用=赋值

深拷贝实现方式:

  • 递归赋值所有层数
  • JSON对象也可以实现深拷贝 ,但是无法实现对象中的深拷贝
  • 使用JQuery中的extend方法
  • 使用Loash函数库实现cloneDeep()方法
  • 使用Relfect反射
  • 使用Oject.assign({}, obj)
  • 使用Array.slice(0)
  • 使用Array.contact()
  • 使用Object.create(obj)
  • 使用扩展运算符