JavaScript中的数据类型一共有7中,分别是Number,Boolean,String,Null,Undefined,Symbol和Object。基本数据类型包含Number,Boolean,String,Null,Undefined以及Symbol。
基本数据类型与对象数据类型(Object)的区别在哪里呢?
- 首先,基本数据类型的值不可改变,对象数据类型的值可以改变
其实当时看完这句话,我的内心是拒绝的,因为你看:
let number = 111;
number = 222;
console.log(number);
输出不就是222吗?
其实这样改变的并不是基本数据类型的值,而是一个变量的值。在存储区域中,111和222的地址是不会变的。
- 其次,基本数据类型存储的是值,而对象数据类型存储的是指针
什么是指针(地址),嗯……对于学习过C/C++的人应该知道,有静态存储区和动态存储区,对于基本数据类型,它们都是存储在静态存储区的,它们有固定的地址,例如字符'a'在内存中就有固定的地址。而对于对象数据类型,它们存储的是指针,指针的作用就是存储你所想要访问数据的地址,画图来说大概就是这样:
http://ww1.sinaimg.cn/large/005Vjb0Sly1g9qqdp4xpzj30vf08xt8m.jpg)
所以,当我们对基本数据类型进行操作时:
let a=1;
let b = a;
b = 2;
console.log(a);
输出的a还是1,因为它不会因为b的值发生变化而受到影响。
如果是对象数据类型:
let c = [];
let d = c;
d.push(1);
console.log(c);
输出的结果就是[1]。
- 再次,基本数据类型的比较是值的比较,对象数据类型的比较是地址的比较。
这个有了上面的例子,就比较好理解。因为对象是以地址来访问的,所以当我们比较的时候,其实比较的是内部的地址是否相同,而对于基本数据类型的比较,则是对于值是否相同来比较的。
总结一下,可以得出下表结论:
类型 | 基本数据类型 | 对象数据类型 |
---|---|---|
值 | 无法改变 | 可以改变 |
属性和方法 | 无法添加 | 可以添加 |
存储值 | 值 | 指针(地址) |
比较 | 值的比较 | 地址的比较 |