堆和栈的概念

        今天来说一下自己对于堆和栈的理解。

        首先JavaScript中的变量分为基本类型和引用类型。

        基本类型就是保存在栈内存中的简单数据段,而引用类型指的是那些保存在堆内存中的对象。

        1、基本类型

        基本类型有Undefined、Null、Boolean、Number 和String。这些类型在内存中分别占有固定大小的空间,他们的值保存在栈空间,我们通过按值来访问的。

        例如:

let a = '张三'
let b = '张三'
console.log(a==b)//ture
console.log(a===b)//ture

        2、引用类型

        引用类型,值大小不固定,栈内存中存放地址指向堆内存中的对象。是按引用访问的。

        所以值看似相同的两个对象实际上却不相等:因为是不同对象,所以在栈中留存的堆地址

不同,//a==b优先比较堆内容。

let a ={
    name : '张三',
    id :007
}
let b ={
    name : '张三',
    id :007
}
console.log(a==b)//false
console.log(a===b)//false

let a = 10
let b = a  //复制a的值给b
b = 20  //改变b值,a不变

         除了对象外,数组也是:因为a储存的数组变了,所以地址也变化了,所以a,b不同。

let a = [1,2,3]
let b = a
console.log(a,b)//[ 1, 2, 3 ] [ 1, 2, 3 ]
a = [5,6]
console.log(a,b);//[ 5, 6 ] [ 1, 2, 3 ]

        !!!!!!!总结:引用对象是同一引用对象的情况下,栈(也就是存放引用对象地址的变量所在)中的地址不发生变化,如果引用对象不同,则堆地址(变量储存的地址也不相等)不同。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值