前段时间太忙了,没时间写博客,偶尔写的文章都是放在本地,没有上传到git上…
前言
这是在看视频的时候看到老师提到的,顺手记了下来,在了解关于深拷贝与浅拷贝的相关问题前,需要熟悉数据的值类型和引用类型。
数据类型
数据的基本类型可以分为两类,一类是值类型,也就是基本数据类型,另一类就是引用类型了。
基本数据类型:number,string,boolean,null,undefined,symbol
引用数据类型:object,array,function
基本数据类型的数据是保存在栈中的,而引用数据类型在栈中保存的是变量标识符和指针,指针指向堆内存中的该对象。也就是说,数据真实存在于堆内存,而在该数据类型的变量中保存的则是该对象在堆内存中的地址。
注意事项
浅拷贝只能用于对象中只包含基本类型的数据,修改其中一个的属性后,相互不影响,当对象中仍然包含对象类型的数据时,则是引用关系,修改会相互影响,所以这种情况需要用到深拷贝。
如何使用
那如果我们想对一个新变量进行赋值的时候需要使用一个引用数据类型的变量,该怎么做呢?
深拷贝的方法:
1.JSON.parse(JSON.stringify(obj))
2.递归
1 | function deepClone(obj) { |
二者缺点:只能拷贝对象和数组,无法拷贝函数,无法拷贝原型链上的属性和方法