JavaScript 有哪几种数据类型?
JavaScript 中的数据类型主要分为两大类:
- 原始类型(Primitive Types)—— 7 种(值类型,按值传递)
- 对象类型(Object Type)—— 1 种(引用类型,按引用传递)
1. 原始类型(Primitives) — 共 7 种
| 类型 | 关键字/表示方式 | 是否可变 | 特点与典型值示例 | 常见用途 / 注意事项 |
|---|---|---|---|---|
| undefined | undefined | — | 表示“未定义”,变量声明了但没赋值时的默认值 | 常用来判断变量是否被赋值过 |
| null | null | — | 表示“空值”或“故意置为空的对象引用” | 代表“什么都没有”,常用于主动清空对象引用 |
| boolean | true / false | 不可变 | 只有两个值:真 / 假 | 条件判断、逻辑运算 |
| number | 数字字面量 | 不可变 | 64位浮点数(IEEE 754 double),包含整数和浮点 | NaN, Infinity, -Infinity 也属于 number |
| bigint | 123n 或 BigInt(123) | 不可变 | 任意精度整数(ES2020 引入) | 用于处理超过 Number.MAX_SAFE_INTEGER 的大整数 |
| string | 'hello' 或 "hello" 或 `hello` | 不可变 | 文本、字符序列,支持模板字符串 | 长度可任意,推荐使用模板字符串(`) |
| symbol | Symbol('desc') | 不可变 | 唯一且不可变的值,主要用于创建对象独有的键 | 常用于避免属性名冲突(如私有属性、迭代器等) |
2. 对象类型(Object) — 1 种(广义对象)
| 类型 | 关键字/表示方式 | 是否可变 | 特点与典型值示例 | 常见用途 / 注意事项 |
|---|---|---|---|---|
| Object | {}、[]、function、new Date() 等 | 可变 | 键值对集合(键通常是字符串或 Symbol) | 几乎所有非原始类型都是对象,包括:数组、函数、正则、日期、Map、Set、自定义对象等 |
快速记忆口诀(7 + 1)
原始类型 7 种:
Undefined、Null、Boolean、Number、BigInt、String、Symbol
→ “你不逼我逼死你”(谐音记忆)
对象类型 1 种:
所有不是上面 7 种的,都是 Object(包括数组、函数等)
常见易混淆点总结
typeof null→"object"(历史遗留 bug)typeof NaN→"number"typeof []→"object"typeof function(){}→"function"(特例,虽然本质是对象)- 原始类型是不可变的,重新赋值是创建新值,而不是修改原值
- 对象类型是可变的,修改属性会直接影响原对象
快速对照表(typeof 结果)
typeof undefined // "undefined"
typeof null // "object" ← 著名 bug
typeof true // "boolean"
typeof 123 // "number"
typeof 123n // "bigint"
typeof "hello" // "string"
typeof Symbol() // "symbol"
typeof {} // "object"
typeof [] // "object"
typeof function(){} // "function"
希望这个总结清晰明了!
如果想深入了解某种类型的细节(比如 Symbol 的实际用途、BigInt 的边界情况、对象与原始值的装箱拆箱等),随时告诉我~