一. 数据类型
js主要分为两种数据类型:
基本数据类型(值类型):Number、String、Boolean、Undefined、Null、Symbol(es6新增的一种独一无二的值)和BigInt(es10新增),这些类型可以直接操作保存在变量中的实际值。
引用数据类型:Object。包含Object、Array、function、Date、RegExp。(在JS中除了基本数据类型以外的都是对象,数据是对象,函数是对象,正则表达式是对象)
二. 栈堆存储
值类型栈存储:主要针对(Number、String、Boolean)三种数据。直接存储在栈(stack)中,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储。
例如:
当我们执行下面的代码时栈内存中的变化:
var a=100;
var b=100;
a=200;
引用类型堆栈存储: 主要针对Object、Array这两种引用数据以及null, 同时存储在栈(stack)和堆(heap)中,占据空间大、大小不固定。引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。
特点:
- 引用类型的值可以改变
- 引用数据类型可以添加属性和方法
- 引用数据类型的赋值是对象引用
- 引用类型的比较是引用的比较
- 引用类型是同时保存在栈区中和堆区中的,引用类型的存储需要在内存的栈区和堆区中共同完成,栈区保存变量标识符和指向堆内存的地址