赋值 浅拷贝 深拷贝

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版权协议,转载请附上原文出处链接和本声明。