JavaScript 类型系统包括基本数据类型和复杂数据类型(对象),基本数据类型有六种:Undefined、Null、Boolean、Number、String 和 Symbol,这些基本类型在 JavaScript 中都有对应的包装类型,即 Object 类型的子类。

基本数据类型
1、Undefined:
Undefined 类型只有一个值,即 undefined。
当声明的变量未初始化时,该变量的值就是 undefined。
2、Null:

Null 类型也只有一个值,即 null。
通常表示“无”或“没有对象”,实际上是一个特殊的对象。
3、Boolean:
Boolean 类型有两个值:true 和 false。
用于逻辑运算或流程控制。

4、Number:
包括整数、浮点数、NaN (Not a Number) 和 Infinity。
支持各种数字运算。
5、String:
文本的数据类型,可以由数字、字母和其他字符组成。
支持字符串操作和格式化。
6、Symbol:
是一种独一无二的数据类型,常用于定义对象的唯一属性名。
通过Symbol() 函数创建。
包装类型
对于每个基本数据类型,JavaScript 提供了相应的包装类型,它们都是 Object 类型的子类。
1、Boolean Object:
包装 Boolean 基本类型值的对象。
可以通过new Boolean() 构造函数创建。
2、Number Object:
包装 Number 基本类型值的对象。
可以通过new Number() 构造函数创建。
3、String Object:
包装 String 基本类型值的对象。
可以通过new String() 构造函数创建。
自动装箱与拆箱
在 JavaScript 中,基本类型到包装类型的转换称为装箱(boxing),反之则称为拆箱(unboxing)。
自动装箱: 当基本类型值需要对象行为(如调用方法)时,JavaScript 会自动将其转换为包装类型对象。
自动拆箱: 当不再需要对象行为时,JavaScript 会自动将包装类型对象转换回基本类型值。
相关问题与解答
问题 1: 为什么说 null 是一个特殊的对象?
*解答*: 尽管 null 通常被用来表示“无”或“没有对象”,但在 JavaScript 中,null 实际上是一个预定义的全局对象,这意味着它可以像其他对象一样参与属性查找和调用方法,只不过这些操作都会失败,因为 null 并没有实际的属性或方法。
问题 2: 如何区分基本数据类型和包装类型对象?
*解答*: 可以使用typeof 运算符来区分基本数据类型,因为它对基本类型返回相应的类型名称(如 "number"、"string"),而对包装类型对象则返回 "object",可以通过比较两个值是否严格相等(使用三等号===)来进一步判断,因为基本类型和对应的包装类型对象在比较时是不等价的。