在JS中,我们可以分为两种类型;
- 基本数据类型
- 复杂数据类型
两种数据类型的区别是:存储位置不同;
基本数据类型
基本数据类型主要为一下6种:
- Number
- String
- Boolean
- Undefined: 该类型只有一个特殊的值就是undefined
- Null
- symbol
复杂(引用)数据类型
复杂数据类型统称为Object,主要有一下几种:
- Object
- Array
- Function: 实际上就是对象,每个函数都是Function类型的实例,与其他引用类型一样都有属性和方法。
除上还有Date、Set、Map、RegExp
存储上的区别
- 基本数据类型的值存储在栈中,在栈中存储的是对应的值。
- 引用数据类型的对象存储在堆中,在栈中存储的是指向堆内存的地址
注意:在我们给变量赋值时,解析器首先要确认这个值是基本数据类型的值、还是引用数据类型的值。
基本类型举例:下图演示了基本类型赋值的过程:
let a = 10;
let b = a; // 赋值操作
b = 20;
console.log(a); // 10值
引用类型举例:下图演示这个引用类型赋值过程
var obj1 = {}
var obj2 = obj1;
obj2.name = "Xxx";
console.log(obj1.name); // xxx
不同的数据类型导致赋值变量时的不同:
- 简单类型赋值,是生成相同的值,两个对象对应不同的地址。
- 复杂类型赋值,是将保存对象的内存地址赋值给另一个变量。也就是两个变量指向堆内存中的同一个对象。