JavaScript有几种类型值?能否画出它们的内存图?
JavaScript有七种原始数据类型和一种引用类型:
原始数据类型 (Primitive Data Types): 存储在栈(Stack)内存中,值直接存储在变量访问的位置。
- Boolean:
true
或false
- Null: 只有一个值
null
,表示空或不存在的值。 - Undefined: 变量声明了但未赋值时的默认值
undefined
。 - Number: 所有数字,包括整数和浮点数,都用 Number 类型表示。
- BigInt: 用于表示任意精度的整数。
- String: 文本数据类型,用单引号、双引号或反引号括起来。
- Symbol: 唯一的且不可变的值,主要用于作为对象的属性键。
引用数据类型 (Reference Data Types): 存储在堆(Heap)内存中,变量存储的是值的引用(内存地址),而不是值本身。
- Object: 所有其他数据类型都是 Object 的子类型,包括数组、函数、日期等。
内存图示:
假设我们有以下 JavaScript 代码:
let num = 10; // Number
let str = "hello"; // String
let obj = { name: "Gemini", version: "Pro" }; // Object
let arr = [1, 2, 3]; // Array (Object)
栈内存:
+---------+ +-----------+ +-----------------+ +-----------------+
| num |----->| 10 | | str |----->| "hello" |
+---------+ +-----------+ +-----------------+ +-----------------+
| obj |----->| 0x12345678 | | arr |----->| 0x87654321 |
+---------+ +-----------+ +-----------------+ +-----------------+
堆内存:
0x12345678:
+-----------------+
| name |----->| "Gemini" |
+-----------------+
| version |----->| "Pro" |
+-----------------+
0x87654321:
+---------+ +---------+ +---------+
| 1 | | 2 | | 3 |
+---------+ +---------+ +---------+
解释:
num
和str
是原始类型,它们的值直接存储在栈中。obj
和arr
是引用类型,栈中存储的是它们在堆内存中的地址。obj
在堆内存中有一个空间,存储了它的属性name
和version
,这些属性的值也是存储在堆中的字符串。arr
在堆内存中有一个空间,存储了数组的元素。
注意: 这只是一个简化的内存模型示意图。实际的内存管理要复杂得多,并且会因 JavaScript 引擎的不同而有所差异。 但是,理解栈和堆的概念对于理解 JavaScript 的数据类型和内存管理至关重要。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义