在 JavaScript 中,数据类型主要分为两大类:基本数据类型(原始类型)和引用数据类型(对象类型)。以下是详细的分类和说明:
一、基本数据类型(Primitive Types)
基本数据类型是按值访问的,存储在栈内存中,不可变(修改时会创建新值)。
Number
(数字)- 表示整数或浮点数(如
42
、3.14
)。 - 特殊值:
Infinity
、-Infinity
、NaN
(Not a Number)。 - 示例:
let age = 25;
let price = 99.99;
- 表示整数或浮点数(如
String
(字符串)- 表示文本数据,用单引号、双引号或反引号包裹。
- 示例:
let name = "Alice";
let message = `Hello, ${name}!`; // 模板字符串
Boolean
(布尔值)- 只有两个值:
true
或false
。 - 示例:
let isActive = true;
- 只有两个值:
Undefined
(未定义)- 表示变量已声明但未赋值。
- 示例:
let x;
console.log(x); // 输出: undefined
Null
(空值)- 表示“空”或“无值”,是一个显式赋值的空对象指针。
- 示例:
let user = null; // 主动设置为空
Symbol
(符号)- ES6 新增,表示唯一的标识符,常用于对象属性的键。
- 示例:
const id = Symbol("id");
const obj = { [id]: 123 };
BigInt
(大整数)- ES2020 新增,表示任意精度的整数(后缀
n
)。 - 示例:
const bigNum = 9007199254740991n;
- ES2020 新增,表示任意精度的整数(后缀
二、引用数据类型(Reference Types)
引用数据类型存储在堆内存中,变量保存的是内存地址(引用),可变。
Object
(对象)- 键值对的集合,最基础的对象类型。
- 示例:
const person = { name: "Bob", age: 30 };
Array
(数组)- 有序的元素集合,本质是特殊对象。
- 示例:
const fruits = ["apple", "banana"];
Function
(函数)- 可执行的对象,可接受参数并返回值。
- 示例:
function greet() {
console.log("Hello!");
}
- 其他内置对象
- 如
Date
(日期)、RegExp
(正则表达式)、Map
、Set
等。 - 示例:
const now = new Date();
const regex = /hello/gi;
- 如
三、关键区别
特性 | 基本数据类型 | 引用数据类型 |
---|---|---|
存储位置 | 栈内存 | 堆内存(变量保存引用地址) |
赋值方式 | 复制值 | 复制引用(共享同一对象) |
是否可变 | 不可变(修改会创建新值) | 可变(直接修改对象属性) |
类型检测 | typeof | instanceof 或 typeof + Array.isArray() 等 |
四、注意事项
typeof
的特殊情况typeof null
返回"object"
(历史遗留问题)。typeof function
返回"function"
(函数是特殊对象)。
- 动态类型
- JavaScript 是动态类型语言,变量类型可随时改变。
- 包装对象
- 基本类型在需要时会临时转换为对应的包装对象(如
String
、Number
),但通常无需手动操作。
- 基本类型在需要时会临时转换为对应的包装对象(如
总结
- 基本数据类型:
Number
、String
、Boolean
、Undefined
、Null
、Symbol
、BigInt
。 - 引用数据类型:
Object
及其子类型(如Array
、Function
等)。
理解数据类型是掌握 JavaScript 的基础,尤其在内存管理和类型判断时尤为重要。