JavaScript的数据类型有两大类:基本类型(也可以说是简单类型)和引用类型(也可以说是复杂类型)。
基本类型和复杂类型的区别在于存储位置有所不同。
类型介绍
基本类型
基本类型有6种:Number、String、Boolean、Undefined、Null、Symbol
1.Number
最常见的数值是十进制的,也可以设置八进制(0开头),也可以设置十六进制(0x开头)。如果使用浮点就一定要包含小数点,也可以用科学计数法表示。数值类型中有一个特殊的值——“NaN”,用来表示原本要返回数值的操作失败了,而不是直接报错。
2.String:
字符串类型,可以用单引号(''),双引号(""),反引号(``)标识。字符串是不可变的,一旦创建就不可改变,如果要改变,是先进行了销毁再重新创建。
var text = 'TEXT'
text = text + 'Bonny' //会先进行销毁再重新创建
3.Boolean
布尔类型,有两个字面值:true、false
通过Boolean可以将其他类型转为布尔值,规则如下:
数据类型 | 转为true的值 | 转为false的值 |
---|---|---|
String | 非空字符串 | ”“ |
Object | 任意对象 | null |
Undefined | N/A(不存在) | underfined |
Number | 非0数值(包括无穷值) | 0,NaN |
4.Undefined
Undefined类型只有一个值,那就是undefined,undefined和未定义是不一样的,用let、var定义了一个变量但是没有赋值的时候,就会默认值为undefined,而未定义会报错。
5.Null
也只有一个值,就是null。逻辑上null值表示一个空对象指针,所以对一个值为null的变量进行typeof的时候会返回“object”。其实undefined值是由unll值派生来的。只要变量要保存对象,而当时又没有哪个对象可以保存的时候,就可以用null来填充该变量。
6.Symbol
symbol
是一种原始数据类型,用于创建唯一的标识符。你可以使用 Symbol()
函数来创建一个新的 symbol
。symbol
的值是不可变的,且在全局中是唯一的。它主要用于创建对象属性的键,以确保键的唯一性。
复杂类型
复杂类型有很多,常见的有:Object、Function、Array、Date、RegExp、Map、Set等。
存储方式的区别
基本类型的值存放在栈中,栈中存放的就是对应的值;
引用类型对应的值存放在堆中,而将指向堆内存的地址存放在栈中。
所以当不同类型数据赋值给另一个变量的时候也有点不同:
- 基本类型:生成相同的值,且两个变量的值对应的是不同的地址
- 复杂类型:将保存的内存地址赋值给另一个变量,即两个变量指向堆内存中的同一个值