1.数据类型
基本数据类型:number boolean string null undefined symbol以及ES10新出的BigInt
引用数据类型:Object Array 函数 还有两个特殊的对象:正则(RegExp)和日期(Date)
深拷贝一般针对于数组 对象数据类型
2.赋值 浅拷贝 深拷贝定义
- 基本数据类型的赋值,当新数据改变后原数据并不影响,而引用数据的赋值指向的是同一数据,改变新数据的基本数据和用数据都会发生影响。

- 浅拷贝主要针对于引用数据类型,他复制数据的时候复制的是占中的引用,不同的引用指向同一块儿内存

两者的区别:
赋值就是将原数据的引用赋值给新的变量
而浅拷贝是创建一个对象复制原对象的所有属性,但是如果属性是引用数据类型, 也不会复制真实的数据,而是对应的引用
- 深拷贝则是复制一个新的内存地址,新数据改变也比影响原始数据

3.区别
| 和原数据是否指向同一对象 | 第一层数据 | 第二层数据 | |
|---|---|---|---|
| 赋值 | 是 | 改变会使原数据一起改变 | 改变会使原数据一起改变 |
| 浅拷贝 | 否 | 改变不会使原数据一起改变 | 改变会使原数据一起改变 |
| 深拷贝 | 否 | 改变不会使原数据一起改变 | 改变不会使原数据一起改变 |
4.实现浅拷贝
(1)Object.assign() 当Object只有一层的时候为深拷贝

(2)Array.prototype.concat()

(3)Array.prototype.slice()

5.实现深拷贝
(1)递归复制所有层级的属性
(2)JSON对象的parse和stringify。
结合localStorage实现对象数组存储,这种方法虽然可以实现数组或对象的深拷贝,但是不能处理函数
(3)借助JQ的extend方法(默认是浅拷贝)

若你有其它看法,欢迎指正,期待您的留言!
版权声明:本文为weixin_47277125原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。