js中简单数据类型和复杂数据类型在内存中的存储方式

js数据类型在内存中的存储方式

简单数据类型(number, string, bool, undefined和null)
       简单数据类型在内存中存在栈内存中,每个被声明的简单数据类型都有他自己的一块内存空间。
       复杂数据类型在内存中的声明存放在栈内存中,但是存放的是一个地址,这个地址指向堆内存,堆内存存的是复杂数据类型的数据。

画图解释一下:
       var a=1;当我们声明一个变量a时,会在栈内开辟一块新内存存放这个声明的变量和值。
在这里插入图片描述
当var a=2时,会将这块内存的值改变。
在这里插入图片描述
如果var b=a时,会在栈里面又会新开辟出一块空间, 里面存放的变量是b,值是a传给他的。
在这里插入图片描述
因此两个变量分别对应两块内存空间, 存储的值是相同的, 因此, 当变量a发生改变时, 并不会影响到变量b所拥有的那块内存空间, 所以变量b是不会改变的。
当var c={n:1},因为{n:1}是复杂数据类型,所以栈内存存的是c,数据存在堆内存中,c中存放的地址指向的是堆内存的数据。
在这里插入图片描述
当var c={n:2}时,会指向一个新的堆内存,而且就算是var c={n:1}也会新申请一块堆内存地址,因为引用类型只有地址相同才相同
在这里插入图片描述
****var b=a;引用类型互相赋值之后,他们共用同一个空间,相互影响,一个值改变,另外一个值也会发生改变
在这里插入图片描述

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值