首先熟知的js数据类型分为:基本数据类型和引用数据类型
基本数据类型:是操作的值(String Number Boolean Null Undefined)
引用数据类型:是操作的地址(Object)
接下来通过一道前端面试来分析下:
var a = [1]; var b = a; a.push(2); b = [3]; b.push(4); console.log(a); console.log(b);
不看答案的你能做对吗?a->[1, 2] b->[3, 4]
来分析下为什么会是这样的答案呢?
1)因为数组属于对象类型,所以操作的是地址(堆内存)
2)一开始地址里面存放来 1;
3)把这个地址(地盘)告诉了a, a又告诉了b;
4) a往地址(地盘)里面push了2,因为a和b知道的地址(地盘)是一个,所以他们都知道这里面有1,2
5)b又自己指向了另一个地址(地盘)里面有3,然后往新地址(地盘)里放个4,所以b知道的这个地址是3,4
6)那么b这个地盘不是之前a指向的地址(地盘)了;所以,a知道的是1,2
7)b知道的是自己的这个地盘3,4