当前位置: 首页 > Web前端 > JavaScript

基本类型和引用类型的值

时间:2023-03-26 22:15:12 JavaScript

js中变量的值有两种数据类型,一种是基本类型值,一种是引用类型值。1、基本类型值我们常说的基本类型值包括String、Number、Boolean、Undefined、Null,这5种基本数据类型。通常通过栈的存储结构来存储,存储形式比较简单。变量值a'hello'b1当我们分别定义一个变量a和一个变量b时,毫无疑问,变量a赋值给了变量b。这时候变量b的值就会发生变化。变量值a'hello'b'hello'这时候如果我改变变量a的值,b的值并不会随之改变。变量值a'word'b'hello'vara='hello';varb=1;b=a;//b='hello'a='word';//b='hello'2.引用类型值引用类型也是一种复杂的数据类型,包括Object、Array、Function等引用类型。引用类型的存储结构不同于基本类型。当我们定义一个变量来存储引用类型时,js会将变量存储在栈内存中,并指向堆内存。指向存储在堆存储中的引用值的对象的地址。变量值a地址一b地址二图TDA[地址一]-->B([1,2,3,4,5])c[地址二]-->d([6,7,8,9])当我们分别定义一个变量a和一个变量b时,毫无疑问,变量a赋值给了变量b,此时变量b的值会发生变化。变量值a地址一b地址一图TDA[地址一]-->B([1,2,3,4,5])c[地址一]-->B([1,2,3,4,5])这时候如果我改变变量a的值,b的值也会随之改变。变量值a地址一b地址一图TDA[地址一]-->B([1,2,3,4,5,6])c[地址一]-->B([1,2,3,4,5,6])vara=[1,2,3,4,5];varb=[6,7,8,9];b=a;//b=[1,2,3,4,5];a.push(6);//b=[1,2,3,4,5,6]3.传参传参相信大家都很熟悉了,其中有一些很有意思的东西。函数a(i){i++;returni;}vary=10;varres=a(y);//y=10;//res=11;可能你觉得我无聊,别着急,继续看functiona(obj){obj.b='hello';}varnewobj=newObject();a(newobj);//newobj.b='你好',你觉得传递引用类型的时候,obj是指向外部引用类型的吗,别慌,继续往下看functiona(obj){obj.b='word';对象=新对象();obj.b='helloword';}varnewobj=newObject();a(newobj);//newobj.b=?此时的输出值是多少?相信每个人都会有不同的看法。答案是字。是不是有点不清楚。其实引用类型传递参数obj指向和外部newobj同一个地址是没有错的,但是我们要明白参数pass其实是js在函数内部定义的obj的一个参数,所以obj可以说是函数内部的参数a一开始我们把外部的newobj赋给了内部的obj,所以他们指向同一个地址。这时候我们改变了引用类型值newobj,相应的改变了,但是我们重新定义了引用类型指向我们本地的obj。我们的obj和外部的newobj是没有关联的,函数执行完之后,局部变量也被销毁了。这都是我个人的理解。如果有不对的地方,希望大家指出。