什么是深拷贝和浅拷贝呢 深拷贝和浅拷贝最根本的区别在于是否真正获取一个对象的复制实体,而不是引用。
假设B复制了A,修改A的时候,看B是否发生变化:
如果B跟着也变了,说明是浅拷贝(修改堆内存中的同一个值)
如果B没有改变,说明是深拷贝(修改堆内存中的不同的值)
一、数据类型
数据分为基本数据类型(String, Number, Boolean, Null, Undefined,Symbol)和对象数据类型。
基本数据类型的特点:直接存储在栈(stack)中的数据 引用数据类型的特点:存储的是该对象在栈中引用,真实的数据存放在堆内存里
引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。
什么是拷贝
拷贝就是为了复用原对象的部分或全部数据,在原对象的基础上通过复制的方式创建一个新的对象。
一、深拷贝浅拷贝的区别
浅拷贝的概念:
把对象中,“最外层”的属性,拷贝一份,交给一个新对象
如果发现,属性的值是简单类型,则把值完整拷贝一份,交给新对象
如果是复杂类型,则只复制内存地址,交给新对象
下面简单实现一个浅拷贝
深拷贝的概念:
把对象中每一层属性,都完整的复制一份,交给一个新对象,深拷贝得到的两个对象,是完全内存无关的