javaScript 浅拷贝和深拷贝

时间:2022-11-24 01:14:31


一、什么是浅拷贝和深拷贝?

先聊一下javaSCript的数据类型有哪些

1.基本类型

  1. 数字类型 Number
  2. 字符类型 String
  3. 布尔类型 Boolean
  4. Null
  5. Undefined
  6. symbol

2.引用类型

  1. 对象类型 Object
  2. 数组类型 Array
  3. 函数类型 Function
  4. 正则类型 Regex
  5. 日期类型 Date

3.浅拷贝定义

浅拷贝只是复制了值类型 引用类型也能复制过去,不过复制的是引用类型的指针地址 ,如果后面对其修改双方都会产生修改,而不是真正的拷贝,因此存在父对象被篡改的可能。

4.深拷贝定义

深拷贝就是不但复制了值类型也复制了引用类型 不过引用类型的指针地址是独立存在的 互相修改不影响。

二、实现浅拷贝的方式

1.数组

  • […]
  • Array.splice()
  • Array.splice()
  • Array.from()

注意:

  • 如果所解构的原对象是一维数组或对象,其本质就是对基本数据类型进行等号赋值,那它就是深拷贝;
  • 如果是多维数组或对象,其本质就是对引用类型数据进项等号赋值,那它就是浅拷贝

如果是多维数组或对象,其本质就是对引用类型数据进项等号赋值,那它就是浅拷贝;

2.对象

  • {…}
  • Object.assign({},obj)

3.数组和对象都可用

  • lodash包中的clone()方法

三、实现深拷贝的方式

  • JSON.parse(JSON.stringify())

不能复制undefined和function类型

  • npm lodash包中的cloneDeep()方法
  • jquery的$.extend()方法