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 的数据类型和内存管理至关重要。
浙公网安备 33010602011771号