0%

JavaScript中数组的深拷贝和浅拷贝

最近开发的时候遇到了数组拷贝的问题,数组a是原数组,数组b是拷贝的数组,当操作数组b的时候,数组a也发生了变化, 然后想到了数组深拷贝和浅拷贝。

堆内存和栈内存?

JS中变量分基本数据类型和引用数据类型。

基本数据: String,Number,Boolean,Undefined,Null

引用数据类型:Object,Function,Array等。

栈(Stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。

如果是基础类型,那栈中存的是数据本身。

如果是对象类型,那栈中存的是堆中对象的引用。

栈内存的运行效率比堆内存高,栈内存的空间比堆内存小。

基本数据的值和地址都存在栈内存中。

引用类型的值存放在栈内存中,引用类型的地址存放在堆内存中。

深拷贝与浅拷贝

浅拷贝:复制变量的地址,所有地址对象都指向一个数据,而且所有地址对象都能修改这个数据。

深拷贝:复制变量的值。对于非基本类型的变量,则递归至基本类型变量后,再复制。数组中可以使用slice和concat方法来进行深拷贝。