【JavaScript】【对象】底层数据结构

67 阅读2分钟

前言

数据类型

JavaScript的数据类型可以划分为两大类:基本类型和引用类型

基本类型

  • 种类StringNumberBooleanUndefinedNullSymbolBigInt
  • 特点:值不可变,没有 属性方法,保存在栈内存中;两值比较时,是比较的值和值类型

引用类型

  • 种类Object,上述七种之外的都是。例如:Date、正则、Function等
  • 特点:值同时保存在栈内存堆内存中的对象。在栈内存中保存变量值(值);堆内存存储对象的地址(键)

一、底层数据结构

1.1 堆(heap)

堆,堆内存的简称。

  • 特点
    • 动态分配内存,内存大小不一,也不会自动释放
    • 队列优先,先进先出,方便存储和开辟内存空间

1.2 栈(stack)

栈,栈内存的简称。

  • 特点

    • 自动分配相对固定大小的内存空间;由系统自动释放
    • 线性结构,先进后出,便于管理
  • 使用栈存储基本类型数据的原因分析:

    • 每种类型的数据占用的内存空间的大小是确定的,并由系统自动分配和释放
    • 好处:内存可以及时得到回收,相对于对来说,更加容易管理内存空间

1.3 引用类型使用堆和栈来存储的原因分析

引用类型的数据的地址指针是存储于中,存储于

  • 访问数据时,取值过程:

    1. 从栈中获得对象的地址指针
    2. 再通过地址指针找到堆中的对应的数据

    image.png

1.4 物理结构

物理结构,数据在内存中的存储结构。

  • 顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。例如:数组
  • 链式存储结构:是把数据元素存放在内存中的任意存储单元里(也可以理解为,随机位置),这些数据在内存中的地址可以是连续的,也可以是不连续的。例如:链表

二、深/浅拷贝

深拷贝与浅拷贝的区别:修改深拷贝的值不会影响原值;修改浅拷贝的值会影响原值 详情可看:【JavaScript】深拷贝和浅拷贝

参考: