基础值和引用值及他们之间的区别

158 阅读2分钟

定义

基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象。

基本类型值

· string 类型
· number 类型
· boolean 类型
· null 类型
· undefined 类型
· symbol 类型
· object 类型

引用类型值

· object Object 类型
· object Array 类型
· object Date 类型
· object RegExp 类型
· object Function 类型
· object Boolean 类型
· object Number 类型
· object String 类型
· object Set 类型
· object Map 类型
· 其他各种内置类型以及各种自定义类型

原始值和引用值的区别

原始值的数据存在栈中,原始值相互赋值就相当于拷贝,其中改变某一个变量的值,结果改变;而引用值的数据存在堆内存heap中,栈存放着目标堆内存的地址,引用值的相互赋值就相当于地址的赋值,指向同一个堆内存,之后结果不变。

Javascript把内存划分成两种:一种是栈内存,一种是堆内存。

栈内存

先进后出。主要存放一些基本类型的变量和对象的引用(基本类型值在内存中占据固定大小的空间,因此被保存在栈内存中,会自动释放)

堆内存

队列优先,先进先出。用于复杂数据类型(引用类型)分配空间,例如数组对象、object对象(引用类型的值通常大小不固定,所以被存储在堆内存中,不会自动释放)

两者区别

堆内存是运行时动态分配内存的,因此存取速度较慢。而栈内存存取速度比堆要快,并且栈内的数据可以共享。栈内存中的变量一般都是已知大小或者有范围上限的,相当于一种简单存储。而堆内存存储的对象类型数据对于大小这方面,一般都是未知的。