Skip to content

其实程序的运行本质上就是对数据的操作,所以数据其实是基础中的基础,数据就是表示有用的信息,比如人的身高,体重这些各种各样的东西都是数据。

数据有很多种类吧,在 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 中,我们如果要用字符串保存双引号,没有必要总是用 \",更常见的做法是,用单引号来表示这个字符串,反之亦然,如下所示:

js
console. log ('"这是一个字符串"');

那这个为什么叫转义字符呢,因为我们在字符中无法表示特殊字符,也就是有特殊含义的字符,比如 ',这个表示的就是字符串的开始和结束标记,当我们使用 \' 转义之后,它的含义就发生了变化,\' 这个整体表示的就是单纯的一个单引号,不带有任何特殊含义,被转义的单引号也不再作为字符串起始和结束标记。

转义字符除了让有特殊含义的字符正常表示以外,还可以表示其他一些特殊字符,比如 \n 表示一个换行符,\t 表示一个制表位,常用的就下面几个:

代码含义
\n换行
\r回车
\ttab(制表符)
\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 来处理未初始化的数据:

  1. 这个值不应该具有引用的含义,因为它不仅仅涉及对象。
  2. 这个值不应强制为 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: "四川" },
}); //带有数据的对象

245d3f93b609541524b7c94cebc16af4_MD5

输出的结果就如上图所示,在第二个对象中有三个属性,分别是 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 所有的返回值都是带双引号的,这也可以印证这里的说法
![Pasted image 20240108191239](/notes-assets/02.JavaScript/1.JavaScript语法基础/assets/Pasted image 20240108191239.png)

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

以笔记为镜,可以知得失