1、简单数据类型:如字符串、数值等
- 在内存中是以栈的形式存放的。
2、复杂数据类型:如数组、对象。
- 在内存中是以堆的数据结构存放的。
3、栈的特点是:1、速度快;2、栈中直接存储变量的值。
- 即栈是传值操作。变量赋值是直接将值复制一份,因此,前一个变量被重新赋值,并不会影响后来变量的值。
var name = "zhangsan";
var name1 = name; //简单数据类型是栈存放,是传值操作。即直接复制一份给了name1.
name = "lisi";
console.log(name); //lisi
console.log(name1); //zhangsan
4、堆的特点:1、速度慢;2、访问堆,需要先访问栈中该堆的地址(形象的说就是房间号,通过这个房间号才能找到堆)。
- 即堆是传址操作。因此,改变堆的值,所有引用该堆的变量的值都会发生改变。
因为栈中存放的是堆的地址,因此复杂数据类型的赋值,是将堆的地址重新复制一份给新的变量,等于没变,因为2个地址指向的是同一个堆空间。
而复杂数据类型的赋值操作,直接修改的是堆的内容,因此所有引用这个堆的变量的值都会跟着发生改变。
var a = {name:"zhangsan", age:18}; //这是复杂数据类型,堆存放。
var b = a;
a.name = "lisi";
console.log(a); //{name: "lisi", age: 18}
console.log(b); //{name: "lisi", age: 18}