在《变量和常量》一章中我们知道,开发者为了能够更方便的操作数据,会将数据进行命名保存。但是,仅仅是对每一条数据进行命名保存是不够的。因为在开发过程中,往往会涉及到大量的数据,任何东西一旦数量多了之后就会变得难以管理。所以,除了对数据进行命名保存外,开发者们还对所有的数据都进行了分类,让程序中用到的任何一条数据都是属于某一类数据类型的。
数据类型的分类
截止到 ES6 为止,JavaScript 将所有的数据划分为了 7 种不同的数据类型。其中 6 种属于简单数据类型,1 种属于复杂数据类型。
数据类型 | 说明 |
---|---|
number | 数值 |
string | 字符串 |
boolean | 布尔值 |
undefined | 未定义 |
null | 空值 |
symbol | 符号 |
object | 对象 |
简单数据类型
简单数据类型也称之为“基础数据类型“、”原始数据类型”。
number
number 类型即“数值类型”。我们数学中用到的所有数字都属于 number 类型。例如:
|
|
JavaScript 的 number 类型中除了数学中的数字外,还有一个特殊值 —— NaN
。
NaN
(Not a Number),表示“非数字”。它的特殊之处不仅仅在于“非数字”属于数值类型,NaN
还有两个特点:
- 任何跟
NaN
有关的操作,得到的结果都是NaN
。 NaN
跟任何数据都不相等,包括NaN
自己。
|
|
string
string 类型即“字符串类型”。任何数据只要被引号包起来,那么就属于 string 类型。例如:
|
|
注意:在 JavaScript 中单双引号没有区别。但是同类型引号不能互相包含。
|
|
模板字符串
除了常见的单双引号外,ES6 中还新增了一种字符串的表现形式,叫做“模板字符串”。符号为 ``(与波浪号同一按键)。
|
|
模板字符串与普通字符串的区别:
模板字符串内部支持回车换行
123456// 错误语法(普通字符串内部不支持回车换行)let str1 = "how are you?I'm fine, thank you.";// 正确语法let str2 = `how are you?I'm fine, thank you.`;可以解析模板字符串内部代码
1234let name = "韩梅梅";let str1 = "hello, name"; // hello, name// 在模板字符串中,将需要解析的代码用 ${} 包起来let str2 = `hello, ${name}`; // hello, 韩梅梅
boolean
boolean 类型即“布尔值类型”。这个类型中只有两条数据:true
和false
,分别表示“真”和“假”。
undefined
undefined 类型即“未定义类型”。这个类型中只有一条数据:undefined
。
undefined
这个值一般用于表示”没有数据”。当没有数据而程序又在访问数据时,就会得到undefined
这个值。
可以简单的理解为:“有容器,没数据”。即当容器创建好,但容器中并没有保存数据时,这个时候就默认容器中的数据值为undefined
。内存会为undefined
分配储存空间。
|
|
null
null 类型即“空值类型”。这个类型中也只有一条数据:null
。
null
这个值用于表示”没有/空”,一般用于释放内存。当一个容器的数据值被设置为null
后,内存中就不再为该数据分配储存空间。
|
|
symbol
symbol 类型即符号类型。这个类型是 ES6 中新增的一种数据类型,用来表示唯一的值。即在这个类型下的所有数据都是不相等的。
复杂数据类型
复杂数据类型也称之为“引用数据类型”。JavaScript 中的复杂数据类型只有一种:object。
object
object 类型即对象类型。在 JavaScript 中,只要是不属于 6 种简单类型的数据,都可以看做属于复杂类型。
例如后面我们会讲到的Array
、Set
、Map
等。