js中基本数据类型与引用数据类型在内存中如何存储

内存分为栈内存与堆内存

一、基本数据类型(number、string、boolean、null、undefined)

每定义一个变量就会在栈里面开辟一块新的内存空间

let  a = 123
let b = a
a = 456
console.log(a)  // 456
console.log(b)  // 123

基本数据类型是在栈内存中存储的

image.png

二、引用数据类型

复杂数据类型在声明之后, 会在堆内存中开辟出一块空间, 用来存放数据, 拿对象举例, 在我们新建一个对象之后, 会在堆内存中开辟一块空间, 用来存放对象里的数据, 而复杂数据类型跟简单数据类型的不同点就是在于, 简单数据类型的变量指向的是内存中的数据, 而复杂数据类型指向的是其在内存中的地址,通过这个地址, 从而拿到地址中的数据, 因此, 如果将一个对象赋值给另一个对象的时候, 其实是把这个对象在内存空间中的地址传递给了另一个对象, 此时, 他们共享内存中的同一块空间以及空间里的数据, 如果对其中一个对象的一个属性进行修改的话, 那么因为两个对象是共享一块地址一个数据的, 因此另一个对象中的属性也会被改变. 如果对其中一个对象重新赋值的话, 那么这个对象就会指向另一块内存空间, 就不在与另一个对象共享同一块内存了。

let obj = { name: '张三' }
let obj1 = obj
obj1 = { name: '李四' }
console.log(obj.name)  // 李四
console.log(obj1.name)  // 李四

引用数据类型的实例存储在堆中, 其相关变量存储在栈中。 不同的变量可以指向堆中的同一实例

image.png

image.png

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容