基本数据类型有number、string、boolean、undefined、null,值是不可变的,存放在栈内存当中,es6又引入了BigInt(大整数)和Symbol
引用数据类型有object、function、array,值是可变的,存放在堆内存,通过栈内存的指针指向
堆内存和栈内存就像一个个的小房子,每个房子都有自己的编号,存取东西的时候直接按照编号来

基本数据类型
1、当创建两个变量时,栈内存中就会保存这两个值
//基本数据类型的引用赋值不会改变原始值
var a = 1;
var b = a;
console.log(a,b)//1,1

2、当改变a的值的时候,b的值并不会受影响,因为改变的只是a房间的值。实际上并不是改变了a的值,而是重新给a分配了一个房间,原来的值仍然在,只是没有联系了,原来存放a值的房间号码还原,但值还在。
//基本数据类型的引用赋值不会改变原始值
var a = 1;
var b = a;
console.log(a,b)//1,1
a=2;
console.log(a,b)//2,1

引用数据类型
1、当创建两个数组时,因为是引用数据类型,堆内存中就会保存这两个值,并且arr和arr1都指向同一个堆内存的地址
//引用数据类型的值是可变的
var arr = [1,2];
var arr1 = arr;
console.log(a,b)//[1,2],[1,2]

2、当push一个值进arr里面时,arr和arr1的值都会发生改变,都会增加一个3,因为它们指向的是同一个地址
//引用数据类型的值是可变的
var arr = [1,2];
var arr1 = arr;
console.log(a,b)//[1,2],[1,2]
arr.push(3);
console.log(arr ,arr1 )//[1,2,3],[1,2,3]

3、当重新给arr赋值时,arr的引用地址会发生改变,arr1不会(js执行顺序的问题,在此之前arr1已经指向了堆内存1001)
//引用数据类型的值是可变的
var arr = [1,2];
var arr1 = arr;
console.log(a,b)//[1,2],[1,2]
arr = [1,2,3];
console.log(arr ,arr1 )//[1,2,3],[1,2]

第二步是操作数组arr,那么堆内存里面的值会发生改变,第三步是重新给arr赋值,它指向堆内存的地址发生了变化

本文深入解析JavaScript中的基本数据类型与引用数据类型的区别,包括它们的存储方式、如何在堆内存和栈内存中工作,以及变量赋值时的行为差异。通过具体示例,帮助读者理解JS内存管理机制。
5451

被折叠的 条评论
为什么被折叠?



