跳到主要内容

认识

2025年03月18日
柏拉文
越努力,越幸运

一、认识


二、问题


2.1 JavaScript 中的数据是如何存储在内存中的?

JavaScript 中, 内存主要分为 两个区域。基本数据类型(如数字、字符串等)存储在 中, 直接保存值, 赋值操作时会复制整个值; 而引用数据类型(如对象、数组、函数)存储在 中, 变量中保存的是指向实际数据的引用。这样的内存分配机制解释了为什么基本类型是不可变的, 而引用类型是可变的, 并且赋值、函数参数传递以及比较操作在两种类型上会有不同的表现。此外, JS 引擎会通过垃圾回收机制管理堆内存, 确保内存的有效利用。虽然这种分区是一个抽象概念, 不同引擎可能在实现上有差异, 但它帮助我们理解 JavaScript 内存管理的核心逻辑。

2.2 JS 基本数据类型 和 引用数据类型有什么区别?

JavaScript基本数据类型(如 numberstringbooleanundefinednullsymbolbigint)直接存储在栈内存中, 变量中保存的是实际的值, 一旦创建, 就不能直接修改其值, 任何修改操作都会生成一个新的值, 在比较计算中, 比较的是实际的值。另外, 虽然 null 属于基本数据类型, 但由于历史遗留问题, typeof null 会返回 object, 这是一个需要注意的特殊情况。

引用数据类型(主要是 Object, 包括数组、函数等)存储的是指向堆内存中对象的引用, 对象内部的属性可以随时修改, 不改变变量中存储的引用地址, 在比较计算中, 比较的是引用地址。

这意味着在赋值、传参及比较时, 两者表现出不同的行为: 基本类型是按值复制, 引用类型则是复制引用。理解这一点对于处理数据操作、避免副作用及内存管理至关重要。