Javascript值类型和引用类型

首先了解下堆栈的基本知识点:

栈(stack)和堆(heap)

1.    stack为自动分配的内存空间,它由系统自动释放;而heap则是动态分配的内存,大小不定也不会自动释放。

2.     栈一般保存的基本类型或引用类型中的指针,堆一般保存对象,数组等大小不定的数据;

基本类型比较简单,其中有:Undefined、Null、Boolean、Number和String,基本类型值就是简单的数据段;

引用类型值可能由多个值构成的对象。引用类型值保存在内存中,而JS是不能直接访问内存的,所以对于引用类型,操作的不是实际的对象而是对象的引用。包括数组,对象,函数等

基本类型读取数据一般直接从栈中读取,而引用类型是先从栈中读取数据的指针(数据的地址),然后通过该地址从堆中读取数据;如图所示:


基本类型(独立性,相互不影响);示例如下:


扫描二维码关注公众号,回复: 5100539 查看本文章

变量num1赋值给变量num2,是将变量num1的数据直接赋值给变量num2,所以这两个变量之间值的变化相互不影响;

引用类型(指针不同,但是指针指向同一个数据对象,相互影响,不具有独立性);示例如下:


通过对比基本类型的结果发现,变量arr1赋值给变量arr2,是将变量arr1的指针赋值给变量arr2,变量arr1和arr2本质上还是指向同个数据,所以当两个变量之间的值发生变化时会相互影响;

检测基本类型:typeof()该方法主要针对基本类型数据的类型判断(number,string,undefined,null,boolean)。注意null检测得到的是Object;


检测引用类型:instaceof进行检测一般只返回boolean值

 

javascript回收机制:

对于值类型可分为根据程序是否执行完成来决定是否进行回收;例如:函数里面的局部变量会根据函数执行完成会对该变量进行销毁,全局变量则一般来说不会进行回收,除非关闭页面;(附加:这也是为什么尽量少使用全局变量的原因之一)。

对于引用类型;JS回收机制会根据该对象是否还存在引用来进行回收。就算是在局部环境中某个局部变量新建了对象,如果该对象没有被外面的变量引用,等函数执行完成时也会该对象进行销毁。

猜你喜欢

转载自blog.csdn.net/u012475786/article/details/72379482
今日推荐