一、什么是浅拷贝和深拷贝?
先聊一下javaSCript的数据类型有哪些
1.基本类型
- 数字类型 Number
- 字符类型 String
- 布尔类型 Boolean
- Null
- Undefined
- symbol
2.引用类型
- 对象类型 Object
- 数组类型 Array
- 函数类型 Function
- 正则类型 Regex
- 日期类型 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()方法