JavaScript基础数据类型
JavaScript 的数据类型可以分为 原始类型(Primitive Types) 和 引用类型(Reference Types) 两大类。
1. 原始类型(Primitive Types)
原始类型的值是不可变的(immutable),直接存储在栈内存中,按值传递。
共有 7 种 原始类型:
-
number
• 整数、浮点数(如42、3.14)。
• 特殊值:NaN(非数字)、Infinity(无穷大)。 -
string
• 文本数据(如"hello")。
• 使用单引号、双引号或反引号(模板字符串)。 -
boolean
• 逻辑值:true或false。 -
undefined
• 变量未初始化时的默认值(如let a;)。 -
null
• 表示“空”或“无值”(需显式赋值,如let a = null;)。 -
symbol(ES6 新增)
• 唯一且不可变的值(如const id = Symbol("id");)。 -
bigint(ES2020 新增)
• 表示任意精度的整数(如123n)。
2. 引用类型(Reference Types)
引用类型的值是可变的(mutable),存储在堆内存中,按引用传递。
常见的引用类型包括:
-
object
• 普通对象(如{ name: "Alice" })。
• 数组([1, 2, 3])、函数(function() {})、日期(new Date())等本质也是对象。 -
function(函数)
• 可执行对象(如function foo() {})。 -
其他内置对象
•Array、Date、RegExp、Map、Set等。
关键区别
| 特性 | 原始类型 | 引用类型 |
|---|---|---|
| 存储方式 | 栈内存(直接存值) | 堆内存(存地址引用) |
| 可变性 | 不可变(值不可修改) | 可变(属性可修改) |
| 比较方式 | 按值比较(1 === 1) |
按引用比较({} !== {}) |
| 传递方式 | 按值传递(复制值) | 按引用传递(共享地址) |
示例代码
// 原始类型
let a = 42; // number
let b = "hello"; // string
let c = true; // boolean
let d = undefined; // undefined
let e = null; // null
let f = Symbol("id"); // symbol
let g = 100n; // bigint
// 引用类型
let obj = { name: "Alice" }; // object
let arr = [1, 2, 3]; // array (本质是 object)
function foo() {} // function
注意事项
-
typeof检测的陷阱:
•typeof null返回"object"(历史遗留问题)。
•typeof function() {}返回"function"(尽管函数是对象)。 -
类型转换:
• 原始类型可通过new String()等包装对象转为引用类型,但通常不建议使用。 -
ES6+ 新增类型:
•Symbol和bigint是较新的类型,需注意兼容性。
总结
• 原始类型 7 种:number、string、boolean、undefined、null、symbol、bigint。
• 引用类型:主要是 object 和 function(包括数组、日期等)。

浙公网安备 33010602011771号