栈内存
-
栈是一种先进后出的数据结构,栈内存是内存中用于存放临时变量的一片内存块。 它是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶,另一端称为栈底。
-
栈内存主要用于存储各种基本类型的变量(Undefined、Null、Boolean、Number、String)以及对象变量的指针
堆内存
-
堆内存的存储不同于栈,虽然他们都是内存中的一片空间,但是堆内存存储变量时没有什么规律可言。它只会用一块足够大的空间来存储变量
-
堆内存主要负责像对象Object(引用数据类型,对象、数组和函数)这种变量类型的存储,堆内存存储的对象类型数据对于大小这方面,一般都是未知的,(这大概也是为什么null作为一个object类型的变量却存储在栈内存中的原因)
区别
两种类型的区别是:存储位置不同。 原始数据类型直接存储在栈(stack)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储。
引用数据类型存储在堆(heap)中的对象,占据空间大、大小不固定。如果存储在栈中,将会影响程序运行的性能;引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实 体。
js 可以分为两种类型的值,一种是基本数据类型,一种是复杂数据类型。
基本数据类型(Undefined、Null、Boolean、Number、String)
复杂数据类型指的是 Object 类型,所有其他的如 Array、Date 等数据类型都可以理解为 Object 类型的子类。