宝哥软件园

JS中原值和参考值存储方法的详细说明

编辑:宝哥软件园 来源:互联网 时间:2021-08-31

在ECMAscript中,变量可以保存两种类型的值,即原始值和引用值

原始值是指表示原始数据类型的值,也称为基本数据类型,包括:Number、Stirng、Boolean、Null和Underfined引用值是指复合数据类型的值,包括:Object、Function、Array、Date、RegExp。根据不同的数据类型,一些变量存储在堆栈中,而另一些存储在堆中。具体区别如下:

原始变量及其值存储在堆栈中。当一个原始变量传递给另一个时,一个栈室的内容被复制到另一个栈室,这两个原始变量互不影响。

引用值是将引用变量的名称存储在堆栈中,但将其实际对象存储在堆中,并且有一个指针通过变量名指向堆中存储的实际对象。当引用对象被传递给另一个变量时,复制的指针实际上指向实际的对象,此时它们指向相同的数据。如果一个方法改变了一个变量的值,那么当访问另一个变量时,它的值也会改变。但是,如果这个值的原始指针不是通过方法而是通过重新分配来改变,这相当于此时重新打开一个房间,那么另一个值不会随着他的改变而改变。

看看这个例子:

var a=' hellovar b=a;a='世界';警报(a);//world alert(b);//hellovar arr=[1,3];arr1=arrarr . push(5);alert(arr)//1,3,5 alert(arr 1);//1,3,5arr=[7,8];警报;//7,8 alert(arr 1);//1,3,5结果如下:

原始变量的值互不影响,引用变量arr和arr1指向同一个对象,所以当arr的值被方法改变时(堆室中的数据改变),改变后的对象会在arr1的数据被访问时被访问

当引用变量的值被非方法改变时,将为引用变量重新创建一个堆空间,指针也将改变:

总结:

Number、Stirng、Boolean、Null、Underfined等基本数据类型及其值直接保存在栈中;

引用类型,如对象、函数、数组、日期和正则表达式,其引用变量存储在堆栈中,通过指针指向存储在堆中的实际对象

以上是边肖介绍的JS中原值和参考值的存储方法的详细说明。希望对大家有帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!

更多资讯
游戏推荐
更多+