前言
数据类型
JavaScript的数据类型可以划分为两大类:基本类型和引用类型
基本类型
- 种类:
String、Number、Boolean、Undefined、Null、Symbol、BigInt - 特点:值不可变,没有 属性方法,保存在栈内存中;两值比较时,是比较的值和值类型
引用类型
- 种类:
Object,上述七种之外的都是。例如:Date、正则、Function等 - 特点:值同时保存在栈内存和堆内存中的对象。在栈内存中保存变量值(值);堆内存存储对象的地址(键)
一、底层数据结构
1.1 堆(heap)
堆,堆内存的简称。
- 特点:
- 动态分配内存,内存大小不一,也不会自动释放
- 队列优先,先进先出,方便存储和开辟内存空间
1.2 栈(stack)
栈,栈内存的简称。
-
特点:
- 自动分配相对固定大小的内存空间;由系统自动释放
- 线性结构,先进后出,便于管理
-
使用栈存储基本类型数据的原因分析:
- 每种类型的数据占用的内存空间的大小是确定的,并由系统自动分配和释放
- 好处:内存可以及时得到回收,相对于对来说,更加容易管理内存空间
1.3 引用类型使用堆和栈来存储的原因分析
引用类型的数据的地址指针是存储于栈中,值存储于堆中
-
访问数据时,取值过程:
- 从栈中获得对象的地址指针
- 再通过地址指针找到堆中的对应的数据
1.4 物理结构
物理结构,数据在内存中的存储结构。
- 顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。例如:数组
- 链式存储结构:是把数据元素存放在内存中的任意存储单元里(也可以理解为,随机位置),这些数据在内存中的地址可以是连续的,也可以是不连续的。例如:链表
二、深/浅拷贝
深拷贝与浅拷贝的区别:修改深拷贝的值不会影响原值;修改浅拷贝的值会影响原值 详情可看:【JavaScript】深拷贝和浅拷贝