一个非常基础的知识点,如何在JavaScript中存储基本数据类型和引用数据类型。
因为我是一个狂野的程序员,刚开始学编程的时候并不关心内存的基础知识,所以提到“栈中存在什么,栈中只存在一个引用”的时候,总是一脸迷惑。
后来,我逐渐学会了一些记忆的知识,这是非常有必要知道的。
基本数据结构
棚
Stack是一种线性表,只允许在段中插入或删除,是一种先进先出的数据结构。
大量
堆是一种基于哈希算法的数据结构。
长队
队列是一种先进先出(FIFO)数据结构。
JavaScript中数据类型的存储
在JavaScript中,数据类型分为基本数据类型和引用数据类型。它们之间的区别之一是存储位置不同。
基本数据类型
我们都知道JavaScript中的基本数据类型有:
字符串数字布尔值未定义的空符号(暂时忽略)基本数据类型是简单的数据段,存储在堆栈内存中。
参考数据类型
JavaScript中的引用数据类型有:
数组对象引用数据类型保存在堆内存中,然后对堆内存中实际对象的引用保存在堆栈内存中。因此,JavaScript中引用数据类型的操作是操作对象的引用,而不是实际对象的引用。
可以理解,地址存储在堆栈存储器中,它与堆栈存储器中的实际值相关。
图表
现在,让我们尝试声明几个变量:
var name=' axuebinvar年龄=25岁;var作业;var arr=[1,2,3];var obj={ age :25 };下图可用于显示数据类型在内存中的存储情况:
此时,名称、年龄、作业这三种基本数据类型直接存储在堆栈内存中,而arr和obj只在堆栈内存中存储一个地址来表示对堆内存的引用。
复制
基本数据类型
对于基本数据类型,如果复制,系统会自动给栈内存中的新变量赋一个新值,这很容易理解。
参考数据类型
对于数组和对象等引用数据类型,复制时会有差异:
系统会自动为堆栈内存中的新变量赋值,但这个值只是一个地址。也就是说,复制的变量和原始变量具有相同的地址值,并且指向堆内存中的相同对象。
如图所示,在执行var objCopy=obj之后,obj和objCopy具有相同的地址值,并在堆内存中执行相同的真实对象。
有什么区别?
当我修改obj或objCopy时,它会导致另一个变量发生变化。
为什么呢?
为什么底层数据类型存在于堆栈中,而引用数据类型存在于堆中?
堆比栈大,栈比较快。基本数据类型相对稳定,占用内存相对较少。引用数据类型的大小是动态且无限的。堆内存是无序的,可以通过引用直接获取。摘要
以上是边肖介绍的JavaScript数据类型的存储方法的详细说明,希望对大家有所帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!