1.深拷贝和浅拷贝的差异是什么?
2.各种数据类型在内存的如何读取?
话不多少我们上代码,我们带着问题去看知识点
var num = 1; var num2 = num; num = 6; var obj = { name: '12' }; var obj2 = obj; obj.name = 'chen'; console.log(num); // 6 console.log(num2); // 1 console.log(obj); //{name: "chen"} console.log(obj2); // {name: "chen"}
对付刚打仗js的同学来说,可能还有这样的疑问 num 和 num2 不应该都是 6吗,我改了obj这个变量的属性值,怎么obj2 也改变了? 这些如果纯挚看这些代码是很难阐明的,由于这些字面上是不知道这些代码实行背后真正在做什么?
我们看下解析和实行代码过程中,内存的变革
var num = 1;
var num2 = num;
num = 6;
var obj = { name: '12' };
var obj2 = obj;
obj.name = 'chen';
此时内存终极的存储的数据
总结:
基本数据类型赋值的是详细值,引用类型赋值的是指向堆内存的地址浅拷贝复制的是栈内存的值,复制引用类型的是地址深拷贝复制的是栈内存的值,访问引用类型的是地址详细复制每个属性值,并在栈内存中开辟新的空间存放指针