天天看点

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

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

简单数据类型(number, string, bool, undefined和null)

       简单数据类型在内存中存在栈内存中,每个被声明的简单数据类型都有他自己的一块内存空间。

       复杂数据类型在内存中的声明存放在栈内存中,但是存放的是一个地址,这个地址指向堆内存,堆内存存的是复杂数据类型的数据。

画图解释一下:

       var a=1;当我们声明一个变量a时,会在栈内开辟一块新内存存放这个声明的变量和值。

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

当var a=2时,会将这块内存的值改变。

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

如果var b=a时,会在栈里面又会新开辟出一块空间, 里面存放的变量是b,值是a传给他的。

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

因此两个变量分别对应两块内存空间, 存储的值是相同的, 因此, 当变量a发生改变时, 并不会影响到变量b所拥有的那块内存空间, 所以变量b是不会改变的。

当var c={n:1},因为{n:1}是复杂数据类型,所以栈内存存的是c,数据存在堆内存中,c中存放的地址指向的是堆内存的数据。

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

当var c={n:2}时,会指向一个新的堆内存,而且就算是var c={n:1}也会新申请一块堆内存地址,因为引用类型只有地址相同才相同

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

****var b=a;引用类型互相赋值之后,他们共用同一个空间,相互影响,一个值改变,另外一个值也会发生改变。

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