《基本数据类型和引用数据类型及 深拷贝 VS 浅拷贝》

248 阅读2分钟

1.栈(stack)和堆(heap):

   a.stack为自动分配内存空间,它由系统自动释放。
   b.heap为动态分配内存,大小也不一定释放。

2.数据类型

a.基本数据类型:string Boolean null number undefined symbol这些值可以操作在变量中的实际值。
b.引用数据类型:object(js中除了基本数据类型之外都是对象 )变量保存指针(引用地址)在栈中,对象保存在堆里

3.基本数据类型(存放在栈中)

a.值存放在栈中的简单数据段,数据大小确定,内存空间大小可以分配,他们是按值存放的,所以可以用值直接访问。

4.引用数据类型(存放在堆中)

a.引用类型实际上是保存在堆内存中的对象,变量其实是保存在栈内存中的一个指针(这指针指向堆内存)
b.变量实际上在栈中,保存的是堆的引用地址。

2.1深浅拷贝


a.深拷贝和浅拷贝都是针对的引用类型,浅拷贝就是只进行一层拷贝,深拷贝就是无限层级拷贝
b.JavaScript存储引用数据(对象)都是存地址的,所以
浅拷贝会导致 obj1 和obj2 指向同一块内存地址。改变其中一方的内容,都是在原来的内存上做修改会导致拷贝对象和源对象都发生改变,
深拷贝是开辟一块新的内存地址,将原对象的各个属性逐个复制进去。对拷贝对象和源对象各自的操作互不影响。

1.浅拷贝(浅拷贝的意思就是只复制引用,而未复制真正的值。)



2.深拷贝(深拷贝就是对目标的完全拷贝,不像浅拷贝那样只是复制了一层引用,就连值也都复制了。只要进行了深拷贝,它们老死不相往来,谁也不会影响谁)


1实现深拷贝的两种方法:

a.利用json数据中的parse 和stringify
b.利用递归实现每一层的重新创建并赋值

B:递归:很多时候可以用递归代替循环,递归是在函数里面把函数自己给调用一遍
列子: