## JavaScript 有几种类型的值?你能画一下他们的内存图吗? #### 涉及知识点: - 栈:原始数据类型(`Undefined`、`Null`、`Boolean`、`Number`、`String`) - 堆:引用数据类型(对象、数组和函数) 两种类型的区别是:存储位置不同。 原始数据类型直接存储在栈(`stack`)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储。 引用数据类型存储在堆(`heap`)中的对象,占据空间大、大小不固定。如果存储在栈中,将会影响程序运行的性能;引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。 #### 回答: js 可以分为两种类型的值,一种是基本数据类型,一种是复杂数据类型。 基本数据类型....(参考1) 复杂数据类型指的是 `Object` 类型,所有其他的如 `Array`、`Date` 等数据类型都可以理解为 `Object` 类型的子类。 两种类型间的主要区别是它们的存储位置不同,基本数据类型的值直接保存在栈中,而复杂数据类型的值保存在堆中,通过使用在栈中保存对应的指针来获取堆中的值。 ![内存图](https://img.kancloud.cn/84/03/840337fc07dcf89621255644fdb339c7_311x390.png) #### 详细资料可以参考: * [《JavaScript 有几种类型的值?》](https://blog.csdn.net/lxcao/article/details/52749421) * [《JavaScript 有几种类型的值?能否画一下它们的内存图;》](https://blog.csdn.net/jiangjuanjaun/article/details/80327342)