浅拷贝
前提:JS中的变量都是保存到栈内存中的。
总结:基本数据类型和引用数据类型的变量(指针)是存在栈中,浅拷贝只拷贝了栈中的,所以会拷贝基本数据类型的值(数据有新内存)和引用数据类型的指针(数据没有新的内存)。
浅拷贝对象套对象的那种,就是对象属性又有对象的,只会拷贝一层,如果拷贝后修改里层对象的属性,原始数据的里层也会变化。
对于基本数据类型
基本数据类型的值在栈内存中存储,每一个都在栈中有一个独立的内存空间。
对于引用数据类型
是拷贝了一层的,拷贝的就是内存地址,所有的对象都指向这个地址的值,只要有一个对象对此地址的值进行改变,所有对象取到的值都会变化。
push()方法
当push()添加引用数据类型时(数组,对象)都是浅拷贝,当添加的项发生改变时,原来的数据也会发生变化。
图例
对象中的基本数据类型被拷贝后改变,原始数据没有被改变
对象中的引用数据类型被拷贝后改变,原始数据改变了
push()对于引用数据类型也是浅拷贝
改变push后的属性值,原属性值也变了:
改test里面的肯定也会变。