基本类型:Number Boolean String undefined null
引用类型:Object Function
* 基本类型的数据是存放在栈内存中的,而引用类型的数据是存放在堆内存中的
## eg1:基本类型复制变量值
~~~
var a = 10;
var b = a;
b = 20;
console.log(a); // 10值
~~~
![](https://box.kancloud.cn/58f2a9a68015a9819e88502b4a1b70c3_544x222.png)
> 也就是说,基本类型的复制就是在栈内存中开辟出了一个新的存储区域用来存储新的变量,这个变量有它自己的值,只不过和前面的值一样,所以如果其中一个的值改变,则不会影响到另一个。
## eg2:引用类型
~~~
var obj1 = {age:19}
var obj2 = obj1;
obj2.name = "我有名字了";
console.log(obj1.name); // 我有名字了
~~~
![](https://box.kancloud.cn/d548bf8a6c90351e4694ca9448aa7916_577x513.png)
> 定义了一个对象其实是在栈内存中存储了一个指针,这个指针指向堆内存中该对象的存储地址。复制给另一个对象的过程其实是把该对象的地址复制给了另一个对象变量,两个指针都指向同一个对象,所以若其中一个修改了,则另一个也会改变。