JS中对象数据存储

对象数据存储在堆栈中。栈的数据读取,写入速度快,但是存储的内容较少。堆的读取和写入速度慢,但是存储的内容多。举个例子来说就像电脑中内存和硬盘,内存就像栈,需要经常获取,写入速度比较快时需要写道内存也就是需要存储在栈中的数据,其中字符型,数值型,布尔型,undefined存储在栈中,栈中,一旦该变量不再使用时就会被清理掉。而对象是存储在堆中,当堆中有对象时,它会相对应内存中有一个存储的地址,在栈中obj存储了在堆中数据的地址,当调用数据时,去堆中调取对应堆中的数据的地址获取出来。

OSS javascript 对象存储 js对象存储在哪里_赋值


OSS javascript 对象存储 js对象存储在哪里_数据_02


OSS javascript 对象存储 js对象存储在哪里_OSS javascript 对象存储_03


如上图,代码执行时一行接着一行,先创建一个对象,打印在控制台后,把obj的a值改为10,在控制台点开对象前的箭头时,obj的a值却已经更改为10,这就是我们在打印后去更改,可在去点击箭头时,才会去堆中对应地址获取数据,所以获取的就是最新的数据。

OSS javascript 对象存储 js对象存储在哪里_存储数据_04

OSS javascript 对象存储 js对象存储在哪里_javascript_05


如上图,如果将obj赋值给obj1,就相当于把obj在堆中存储数据的地址给到obj1,obj1更改对象原有的数据时,obj也会跟着更改。

OSS javascript 对象存储 js对象存储在哪里_javascript_06

OSS javascript 对象存储 js对象存储在哪里_javascript_07

如上图,如果将obj赋值给obj2,但在obj生成新对象时,就会在栈中创建一个新的存储数据的地址,所以后更改对象数据时更改到就是新的存储数据的地址中,而obj2的存储数据地址还是原来的对象地址,所以打印后只有对象在没有生成新对象之前的堆中地址存储的数据。

OSS javascript 对象存储 js对象存储在哪里_存储数据_08


如上图,如果将obj赋值给obj3,两个对象在堆中存储地址相同时,我们两个对象都不想去使用时,把堆中对象存储的地址丢弃时,该数据在堆中存在,并且找不到它,当如此情况非常多时,称之为内存泄漏,会造成卡死,想要解决掉这个问题,

就需要把对象堆中存储数据地址的所有引用对象全部先设置为null,之后再去重新赋值。