在前端开发中,数据类型是构建一切逻辑的原子。
在 JavaScript(ECMAScript 标准)中,数据类型主要分为两大类:基本数据类型(Primitive) 和 引用数据类型(Reference)。目前共有 8 种。
JavaScript 的 8 大数据类型
在 JavaScript 的世界里,数据被分为两大阵营:基本数据类型(Primitive) 和 引用数据类型(Reference)。截至目前的 ECMAScript 标准,共有 8 种 原生数据类型。
一、 基本数据类型(值类型)
基本类型存放在内存的 栈(Stack) 中,特点是:值直接存储在变量访问的位置。
1. Number (数值)
包含整数和浮点数,还有特殊的 NaN(Not a Number)和 Infinity。
- 例子:
let age = 25;,let price = 99.99;,let nan = NaN;(非数字)。
2. String (字符串)
用于表示文本,可以使用单引号、双引号或反引号(模板字符串)。
- 例子:
let name = "兮动人";或
let greeting = Hello, ${
name};
3. Boolean (布尔值)
只有两个逻辑值。
- 例子:
let isLogin = true;
4. Undefined (未定义)
变量已声明但未初始化时的默认值。
当一个变量被声明了但没赋值时,它的默认值就是 undefined。
- 例子:
let x; // x 的值就是 undefined
5. Null (空值)
表示一个空对象的指针。通常用于主动释放对象引用。
表示一个“空”的对象引用。有趣的是,
typeof null会返回"object",这是 JS 历史遗留的一个著名 Bug。
- 例子:
let user = null;
6. Symbol (符号) - ES6 引入
表示独一无二的值,常用于解决对象属性名冲突问题。
- 例子:
let id = Symbol("key");
let emptyRoom = null;
7. BigInt (任意精度整数) - ES10 引入
用于表示大于 的整数(Number 类型的安全上限)。
- 例子:
let bigNum1 = 9007199254740991n;
二、 引用数据类型(对象类型)
8. Object (对象)
存放在内存的堆(Heap)中。变量名在栈中存储的不是值本身,而是一个指向堆内存地址的指针。
除了普通对象 {},以下本质上也属于 Object:
- 普通对象:
let user = { name: "xdr630", age: 22 }; - Array (数组):
[1, 2, 3] - Function (函数):
function() {} - Date (日期)、RegExp (正则) 等。
三、 核心区别对比
| 特性 | 基本数据类型 (Primitive) | 引用数据类型 (Reference) |
|---|---|---|
| 存储位置 | 栈 (Stack) | 堆 (Heap) |
| 赋值表现 | 值的拷贝(修改副本不影响原值) | 地址的拷贝(修改副本会改变原对象) |
| 大小 | 占用空间固定、小 | 占用空间大、不固定 |
| 比较 | 比较的是 值 是否相等 | 比较的是 内存地址 是否相同 |
四、 如何精准判断类型?
在实际开发中,经常用到以下三种方式:
typeof: 简单好用,但无法区分null与object(都会返回"object"),也无法区分数组。instanceof: 用于判断某个实例是否属于某个构造函数(如arr instanceof Array)。Object.prototype.toString.call(): 最强方案。能精准返回[object Array]、[object Null]等字符串。
小知识: 为什么
typeof null是"object"?
这是 JS 最初设计时的 Bug,为了兼容旧代码,这个错误被一直保留到了今天。