堆栈详解

本文探讨了JavaScript中的基本数据类型和引用数据类型在内存中的存储方式。基本数据类型存储在栈内存中,彼此独立,而对象存储在堆内存中,通过内存地址引用。当修改引用数据类型的属性时,会影响到所有引用该对象的变量。此外,还讲解了变量相等比较的基本原理,以及如何通过设置变量为null来断开对象引用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

		/* 
        基本数据类型
        String Number Boolean Null Undefined
        引用数据类型
        Object

        JS中的变量都是保存到栈内存中的
        基本数据类型的值直接在栈内存中存储,
        值与值之间是独立存在的,修改一个变量不会影响其他变量

        对象是保存到堆内存中的
        每创建一个新的对象,就会在堆内存中开辟一个新的空间
        而变量保存的是对象的内存地址
        如果两个变量保存的是同一个对象引用,当通过一个变量改变属性时,另一个也会受到影响
        */
        
        var a = 123;
        var b = a;
        a++;
        console.log(a);//返回124
        console.log(b);//返回123


        var obj = new Object();
        obj.name = "tom";
        var obj2 = obj;
        obj.name = "roy";
        console.log(obj.name);//返回roy
        console.log(obj2.name);//返回roy

图解:
变量a与变量b的值直接存储在栈中,值互不干扰在这里插入图片描述
obj和obj2使用同一个内存地址,值相互影响
在这里插入图片描述

	/* 
    obj2抛弃了obj的地址,改了新的地址,所以不会改变obj
    */
    obj2 = null;
    console.log(obj);//{name:'roy'}
    console.log(obj2);//null

    

图解:
obj2换了新地址,开辟了新的空间,断开了与obj的联系,与obj不相干,所以不影响obj的值
在这里插入图片描述

 	/* 
    当比较两个基本数据类型的值时,就是比较值
    比较两个引用数据类型时,就是比较内存地址,即使值相同,但地址不同,它仍会返回false。
    */
    var c = 10,d = 10;
    console.log(c == d);//true

    var obj3 = new Object();
    var obj4 = new Object();
    obj3.name = "aaa";
    obj4.name = "aaa";
    console.log(obj3 == obj4);//false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值