理解js的基本类型和引用类型
1.基本类型
1.1.基本的数据类型有:undefined,boolean,number,string,null。
1.2.基本类型的变量是存放在栈内存的。
var a = "hello";
var b = a;
console.log(a); // hello
console.log(b); // hello
a = "world";
console.log(a); // world
console.log(b); // hello
上述a,b为基本类型,a赋值给b时,相当于增加了一个新空间,两者互不影响。
2.引用类型
2.1.除基本数据类型外,剩下的就是引用类型了,统称为 Object 类型。细分有:Object、Array、Date、RegExp、Function等。
2.2.引用类型的值是保存在堆内存中的,栈内存保存的是指向堆内存中该对象的指针/地址。
var a = {}; // a保存了一个空对象的实例
var b = a; // a和b都指向了这个空对象
a.name = 'hello';
console.log(a.name); // 'hello'
console.log(b.name); // 'hello'
b.age = 22;
console.log(b.age);// 22
console.log(a.age);// 22
console.log(a == b);// true
上述a,b为对象。是引用类型。a保存的只是指向它在堆内存中地址的指针,它的副本b也是指向同一个堆内存的地址的指针。所以它们改变的是同一个指向堆内存中的对象。
3.深拷贝和浅拷贝
在引用类型中,a赋值给b,即相当于a复制了一份给b,但它们实际上都是操作同一个堆内存中的对象,这种拷贝称为浅拷贝。如果要使a,b互不影响,那么这种复制称为深拷贝。深拷贝有几种实现方式,看浅拷贝和深拷贝一篇。