数据类型分类
在 JavaScript 中,每一个值都有其对应的数据类型。目前 JavaScript 中共有 8 种数据类型,它们可以分为两个大类:原始类型、复杂类型:
- 
原始类型: - Undefined只有一个特殊值- undefined,表示未定义或不存在。
- Null只有一个特殊值- null,表示空值。
- Boolean布尔类型,表示布尔值,它有两个值分别是:- true、- false。
- String字符串类型,表示文本数据,比如- 'JavaScript'。
- Number数字类型,使用 64 位双精度浮点型来表示整数或浮点数,比如- 25、- 3.14。
- BigInt数字类型,可以表示任意精度格式的整数。
- Symbol表示唯一的标识符。
 
- 
复杂类型: - Object表示一组无序键值对的集合。
 
typeof 操作符
要确定 JavaScript 中变量的值的是什么类型,可以使用 typeof 操作符,它返回一个字符串来表示操作数(未经计算)的数据类型,使用方法如下:
typeof operand
typeof (operand)
复制代码typeof 可能的返回值如下表:
| 类型 | 结果 | 
|---|---|
| Undefined | ‘undefined’ | 
| Null | ‘object’ | 
| Boolean | ‘boolean’ | 
| String | ‘string’ | 
| Number | ‘number’ | 
| BigInt | ‘bigint’ | 
| Symbol | ‘symbol’ | 
| Object | ‘object’ | 
| 函数 | ‘function’ | 
| 数组 | ‘object’ | 
| 其它对象 | ‘object’ | 
typeof 使用示例如下:
// Undefined
let a;
typeof a; // 'undefined'
// Null
let b = null;
typeof b; // 'object'
// Boolean
let c1 = true;
typeof c1; // 'boolean'
let c2 = false;
typeof c2; // 'boolean'
// String
let e1 = 'JavaScript';
typeof e1; // 'string'
let e2 = '';
typeof e2; // 'string'
let e3 = '123';
typeof e3; // 'string'
// Number
let f1 = 987;
typeof f1; // 'number'
let f2 = 3.14159;
typeof f2; // 'number'
// BigInt
let g = 24n;
typeof g; // 'bigint'
// Symbol
let h = Symbol('foo');
typeof h; // 'symbol'
// 对象
let personObject = {
  name: 'lufei',
  age: 18
};
typeof personObject; // 'object'
let array = [1, 3, '5'];
typeof array; // 'object'
let date = new Date();
typeof date; // 'object'
let regex = /\d/;
typeof regex; // 'object'
typeof Math; // 'object'
// 函数
function fn1() {}
typeof fn1; // 'function'
const fn2 = function xxx() {};
typeof fn2; // 'function'
复制代码Undefined 类型
在 Undefined 类型中只有一个值——特殊值 undefined,它表示未定义,就是此处应该有一个值,但是没有定义。在以下场景中可以得到 undefined 值:
- 
变量声明了,但未被赋值。 let a; a; // undefined 复制代码
- 
对象没有被赋值的属性。 let obj = new Object(); obj.name; // undefined 复制代码
- 
函数没有返回值时,默认返回 undefined。function fn() {} fn(); // undfined 复制代码
- 
调用函数时,应该提供的参数没有提供,那么该参数就是 undefined。function fn(a) { console.log(a) } fn(); // undefined 复制代码
- 
对未定义的变量使用 typeof操作符也会得到undefined。// 变量 foo 未定义 typeof foo; // undefined 复制代码
当然,也可以显示地给变量赋值 undefined:
let a = undefined;
a === undefined; // true
复制代码但是这是不必要且不合理的,因为默认情况下,任何未经初始化的变量都会取得特殊值 undefined。一般来说,永远不要显示地给变量赋值 undefined。
Null 类型
Null 类型也只有一个值——特殊值 null,它表示一个空对象指针,即已经定义了,只是为空值。比如,在声明一个将来要保存对象值的变量时,可以用 null 来进行初始化:
let query = null;
复制代码在使用相等操作符时,JavaScript 认为 undefined 和 null 在表面上是相等的:
undefined == null; // true
复制代码但二者还是有一些不同之处:
- 
undefined表示根本未定义;而null表示定义了只是为空值。所以判断一个值是否存在就应该使用undefined而不是null:name === undefined; 复制代码
- 
在转换成数值时, Number(undefined)是NaN;而Number(null)是 0。
- 
给变量赋值 undefined是不合理的;而给变量赋值null是合理的。
- 
在严格相等操作符下二者并不相等。 
Boolean 类型
布尔值是一种取值只能是真或假的数据类型,它赋予了编程语言在逻辑上表达真或假的能力。有了这种能力,if 语句、for 循环等才能实现。
在 JavaScript 中,Boolean 类型的真假值分别用 true 和 false 来表示,二者都区分大小写。下面是给变量赋值布尔值的示例:
let visible = false;
let loading = true;
复制代码虽然 Boolean 类型只有两个布尔值,但其它数据类型的值都有相应的布尔值的等价形式。要将其它类型的值转换成一个布尔值,需要使用 Boolean() 函数,使用方法如下:
let stringAsBoolean = Boolean('foo');
stringAsBoolean; // true
let numberAsBoolean = Boolean(0);
numberAsBoolean; // false
复制代码在上面代码中,字符串 foo 和数值 0 都会被 Boolean() 函数转换为相应的布尔值:分别是 true 和 false。那么哪些值会被转换为 true,哪些值又会被转换为 false 呢?这取决于以下规则:
undefined、null、''(空字符串)、0、NaN、false 这 6 个值会被转换成 false,其余的值都会被转换成 true。请看如下示例:
Boolean(undefined); // false
Boolean(null); // false
Boolean(''); // false
Boolean(0); // false
Boolean(NaN); // false
Boolean(false); // false
Boolean('aaa'); // true
Boolean(' '); // true,这是包含了空格的字符串,并不是空字符串,注意区分
Boolean(123); // true
let obj = {};
Boolean(obj); // true
let array = [];
Boolean(array); // true
function fn() {}
Boolean(fn); // true
复制代码同时,在 JavaScript 中,凡是预期为布尔值的位置,都会将该位置上的值自动转换为相应的布尔值,转换规则还是上面那条。比如,在 if 流程控制语句中:
let a = 'foo';
if (a) {
  console.log('a 被自动转换为了 true');
}
复制代码运行上面代码,控制台上会输出 a 被自动转换为了 true 。这是因为 if 后面的判断条件,预期是一个布尔值,所以字符串 a 会被自动转换成布尔值 true,从而执行了代码块内的代码。




















![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)
