JavaScript有几种类型值?能否画出它们的内存图?

JavaScript有七种原始数据类型和一种引用类型:

原始数据类型 (Primitive Data Types): 存储在栈(Stack)内存中,值直接存储在变量访问的位置。

  1. Boolean: truefalse
  2. Null: 只有一个值 null,表示空或不存在的值。
  3. Undefined: 变量声明了但未赋值时的默认值 undefined
  4. Number: 所有数字,包括整数和浮点数,都用 Number 类型表示。
  5. BigInt: 用于表示任意精度的整数。
  6. String: 文本数据类型,用单引号、双引号或反引号括起来。
  7. Symbol: 唯一的且不可变的值,主要用于作为对象的属性键。

引用数据类型 (Reference Data Types): 存储在堆(Heap)内存中,变量存储的是值的引用(内存地址),而不是值本身。

  1. 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    |
+---------+       +---------+        +---------+

解释:

  • numstr 是原始类型,它们的值直接存储在栈中。
  • objarr 是引用类型,栈中存储的是它们在堆内存中的地址。
  • obj 在堆内存中有一个空间,存储了它的属性 nameversion,这些属性的值也是存储在堆中的字符串。
  • arr 在堆内存中有一个空间,存储了数组的元素。

注意: 这只是一个简化的内存模型示意图。实际的内存管理要复杂得多,并且会因 JavaScript 引擎的不同而有所差异。 但是,理解栈和堆的概念对于理解 JavaScript 的数据类型和内存管理至关重要。

posted @   王铁柱6  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示