其实程序的运行本质上就是对数据的操作,所以数据其实是基础中的基础,数据就是表示有用的信息,比如人的身高,体重这些各种各样的东西都是数据。
数据有很多种类吧,在 JS 中,数据也分成很多类型,下面详细介绍。
JS 中的数据类型
在 JS 中,数据分为两种类型
- 原始值
- 引用值
原始值
无法再细分的值,JS 提供如下原始值
- 数字 number
- 字符串 string
- 布尔 boolean
- undefined
- null
数字类型
可能和其他强类型语言不一样,JS 的数字类型就是数字类型,并不分浮点型,整型这些,所以不管是小数还是整数我们都称为数字类型。
数字类型我们直接书写就可以。
js
console.log(123);这个代码就输出了数字类型的 123
数字类型可以加前缀表示不同的进制,并且我相信大多数语言都是这个规则,不加前缀表示 10 进制,如果加上了前缀 0 则表示八进制,加上前缀 0X 则表示 16 进制,0B 表示二进制。
js
console.log(012);这句话就是输出八进制的 12,八进制的 12 转为十进制就是 10
字符串
字符串其实就是一长串文本。
字符串有三种方式,分别是单引号,双引号,反引号,这三个符号把一串字符括起来,都可以表示一个字符串,如下所示:
js
console.log("123123123");
console.log('123123123');
console.log(`123123123`);
console.log(123123123);注意,前三行都表示输出字符串 123123123,而第四行输出的 123123123 则是数字,那这有什么区别呢,根据前面对字符串的解释,我们知道,字符串是一长串文本,所以前三个的 123123123 本质上是文本,是不能进行加减运算的,而最后一个则是数字,是可以直接加加减减的。
当然,字符串也可以有中文:
js
console.log("你好");第三种反引号的写法叫做模板字符串,比较特别,这是 ES6 新增的东西,会在 ES6 中详细介绍它的一些神奇功能,双引号和单引号的字符串在 JS 中没有任何区别
那考虑这样一个问题,我们用 " 来表示一个字符串的开始和结束标记,那这就意味着字符串里面并不能包含 ",但如果我们确实需要在字符串中包含双引号应该怎么办呢,这就要用到转义字符。
转义字符其实就是反斜杠: \,\" 在字符串中就可以表示一个双引号,如下所示
js
console.log("\"这是一个字符串\"");控制台会输出以下内容:"这是一个字符串",很显然,这里双引号也输出出来了,意味着我们的字符串中保存了双引号。
那如果我们要表示 \ 本身呢,我们只需要用 \\ 即可,即用两个反斜杠就可以表示一个反斜杠。
在 JS 中,我们如果要用字符串保存双引号,没有必要总是用
\",更常见的做法是,用单引号来表示这个字符串,反之亦然,如下所示:jsconsole. log ('"这是一个字符串"');
那这个为什么叫转义字符呢,因为我们在字符中无法表示特殊字符,也就是有特殊含义的字符,比如 ',这个表示的就是字符串的开始和结束标记,当我们使用 \' 转义之后,它的含义就发生了变化,\' 这个整体表示的就是单纯的一个单引号,不带有任何特殊含义,被转义的单引号也不再作为字符串起始和结束标记。
转义字符除了让有特殊含义的字符正常表示以外,还可以表示其他一些特殊字符,比如 \n 表示一个换行符,\t 表示一个制表位,常用的就下面几个:
| 代码 | 含义 |
|---|---|
| \n | 换行 |
| \r | 回车 |
| \t | tab(制表符) |
| \b | 退格符 |
| \f | 换页符 |
区分数字和字符串
数字和字符串是一个很容易混淆的东西,比如手机号,它看起来是一个数字,实际上是一个字符串,这个其实理解起来也不难,我们就凭感觉,应该怎么去读,如果是要按照数字的读法去读,就是数字,如果是要一位一位去读,就是字符串。比如手机号,我总不可能说这是多少多少万吧,肯定是一位一位读,所以是字符串,而金额就是数字。
布尔类型
布尔类型只有两个取值,真或者假,对应 true 和 false,就有一些东西吧,它本身就只有两种状态,比如一个人是否成年,我们知道一个人要么成年,要么就没有成年,没有其他的可能,这种只有两个取值的东西就可以用布尔类型来表示。
js
console.log(true);
console.log(false);这个值没有什么特别的,要么是 true,要么是 false,这个类型就这两个值。
undefined 类型
表示未定义类型,只有一种书写方式,就是直接写成 undefined,这个值很特殊,我们也一般不会去直接使用,要想搞明白就继续往后学。
js
console.log(undefined);undefined 表示的是未定义类型,而"undefined"表示的则是一个字符串
在其他语言中,使用未初始化的变量是会抛出异常的,JS 的处理方式和其他语言不太一样,使用 undefined 来处理,其实 JavaScript 可以使用 null 来处理,但为了避免以下两个问题,所以最后设计了 undefined 来处理未初始化的数据:
- 这个值不应该具有引用的含义,因为它不仅仅涉及对象。
- 这个值不应强制为 0,这会使错误难以发现。
null 类型
表示空对象,不存在,这个和 undefined 很像,但完全不一样,null 本质上其实是一个对象,这个 null 其实并没有什么用,null 和对象密切相关,并且也属于 JavaScript 的一个历史遗留问题,这里可以记住一个东西,在任何语言中,null 都被用于表示空对象,而在 JavaScript 中,undefined 既可以表示空对象,也可以表示原始值的空值。
js
console.log(null);引用类型
引用类型只有两种,函数和对象,函数会在后面详细介绍,这里只介绍对象。
原始值其实已经可以表示很多数据了,但是现实世界中有太多太多的数据了,为了表示这些数据,光靠原始值是远远不够的,所以就需要对象,在现阶段可以把对象理解为由多个基本类型组合而成的一个东西,就像 C 语言中的结构体一样。
对象的书写方式如下:
js
console.log({}); //空对象
console.log({
name: "ZYL",
age: 18,
address: { contry: "中国", province: "四川" },
}); //带有数据的对象
输出的结果就如上图所示,在第二个对象中有三个属性,分别是 name, address 和 age,每个属性分别又有一个值。而 address 本身的值又是一个对象。
如何查看数据的类型
前面我们说了数据有很多类型,接下来就是如何输出这些类型的问题,JS 中提供了一个操作符用来获取数据类型,如下所示:
js
console.log(typeof "123");这行代码将会输出 "string",表示这个东西是字符串
js
console.log(typeof 123);这行代码将会输出 number,表示这是一个数字。
接下来看一个比较神奇的东西
js
console.log(null);这行代码会输出"object",也就是对象,所以这也是为什么我前面说 null 本质上是一个对象,在 JS 中会把 null 认为是对象。
typeof 返回值的类型
typeof 的返回值是一个字符串,也就是说 typeof 1 得到的是一个字符串的 "number",读者可以通过 console.log(typeof typeof 1) 验证。 注:这个代码在 firefox 环境下输出为 undefined 这是浏览器自身实现的问题,我们可以看到 typeof 所有的返回值都是带双引号的,这也可以印证这里的说法

[!node] 字面量 直接书写的数据叫做字面量,比如我直接写一个 1,这个东西就叫字面量 1,比如我写一个"123",这个就是字面量 123,这个概念和变量相区分。