1.基本数据类型
- Number:数值型包含整型和浮点型,注意NaN也属于数值型,但不是一个数字。
- String:字符串类型。
- undefined:表示未定义,声明变量不赋值的情况下就是undefined。
- Boolean:只有两个值,一个是false一个true
- null:代表一个空对象
2.复杂数据类型
- object:对象类型,我们看到的大多数类型都是对象的实例
- Array:数组,注意:需要判断数组和对象的数据类型时候不能用typtof
- function:函数
3.基本数据类型和复杂数据类型的区别
- 首先是复杂数据类型保存在堆内存中,而基本数据类型保存在栈内存中,然后声明一个复杂数据类型变量中保存的是一个复杂数据类型的地址,基本数据类型保存的是一个具体的值
- 声明两个复杂数据类型指向同一个地址的时候,改变一个另一个也会跟着改变
var obj={name:"小明",age:13}
var obj2=obj
obj2.name="小亮"//这时obj一的值也会改变
console.log(obj)//{name:"小亮",age:13}
console.log(obj2)//{name:"小亮",age:13}
4.在JavaScript中简单数据类型和复杂数据类型在内存中是如何存储的?
简单数据类型:当我们声明一个简单数据类型的变量a时,栈里面会开辟一块新的存储空间,用来存放变量名和值。当这个变量的值发生改变时,栈空间里的对应那块内存的值也会发生变量。如果把这个a赋值给b的时候,栈会另外开辟一块空间给b存储数据。
复杂数据类型:当我们声明一个复杂数据类型的变量ar时,栈里面会开辟一块新的存储空间,而变量的值存在堆内存,在栈内存中会提供一个引用地址指向堆内存。所以把ar赋值给br的时候,br得到的只是栈中指向堆内存的地址,在堆内存中并没有开辟新空间用来存值。因此在对br进行修改时,ar的数据也会变化。