js 基础类型 与 引用类型

JS 基础类型 与 引用类型的区别

什么是引用类型:
引用类型是值无法直接保存在本地变量中,而是通变量保存“地址值“地址值引用存储数据的数据体。

为什么:
因为js中规定一个变量名只能存储一个值,而如,数组,函数,对象,都因为js规定,所以无法直接存储在本地,只能另开辟一个存储空间,来存储,数组体,函数体,对象体,在通过“地址值“保存在本地变量中。本地变量引用——开辟的存储空间。
验证:

    ex:
    var arr=[1,2,3,4,2,5];
    var arr2=arr;
    arr==arr2  =>  true

    ex:
    var arr=[];
    var arr2=[];        
    arr==arr2  =>  false

所以可以通过以上例子验证出,arr中和arr2中保存的是地址值,两 者相比较的不是直接的数组值, 而比较的是各自保存在变量本地的地址值

数组引用类型

什么是基础类型:
值直接存储在本地变量中的数据
这里写图片描述
根据引用类型和基础类型拓展的赋值问题

    ex:var arr=[5,6,3,4,5];
        var arr2=arr;
            arr2[0]--;

            arr[0]=>4;
            arr2[0]=>4;

            arr[1]++;

            arr2[1]=>7;
            arr[1]=>7; 
① var arr="地址值"
② var arr2=arr;//arr将存储在本地的地址值复制一份副本给arr2
                //此时arr2中保存的是和arr同一个地址值
                //此时arr和arr2同时引用着[5,6,3,4,5];
③  arr2[0]--;  //此时修改数组元素,修改的都是同一个数组体
④  arr[0]  => 4
⑤  arr2[0] => 4

⑥  arr[1]++;
⑦  arr[1] => 7
⑧  arr2[1] =>7  //arr2和arr不论如何修改都是修改同一个数组

这里写图片描述

基础类型赋值

    ex:
        var str="String";
        var str2=str;
            str="修改值";
            str2 => "String";
            str  => "修改值";

        ① var str="String";//声明一个变量值直接保存在变量地
        ② var str2=str;//将str的值复制一份副本给str2
        ③     str="修改值";//将str的值修改
        ④     str2=>  "String"
        ⑤     str =>  "修改值"

在str2=str时,引擎将str存储在本地变量中的值复制副本一份给了str2,所以此时在内存中str的值存在两份,所以声明后修改任何一方都不会影响到对方,因为他们从始至终修改的都是各自在本地变量中的值,所以不会影响到对方。

这里写图片描述

总结:
引用类型:值无法保存在变量本地,而是另行开辟一个空间存储其中值,在arr=arr2赋值时只是将arr2中的地址复制一份副本给arr,并不是将整个存储空间中的值复制一份给arr,只是将引用存储空间的地址复制一份给了arr,所以arr和arr2同时引用着同一个存储存储空间中的值,不管任何一方修改都会影响到对方,因为arr 和 arr2从始至终都引用的是同一个存储空间的值。

基础类型:值直接保存在变量本地,在 str2=str; 赋值时是将str中的值复制一份副本给了str2,所以此时内存中存在两份str的值,所以修改任何一方都不会影响到对方。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值