js基础_24、基本数据类型和引用数据类型

基本数据类型

Number、String、Null、Boolean、Undefined

引用数据类型

Object

变量都是保存在栈内存中的

JS中的变量都是保存在栈内存中的,基本数据类型的值直接在栈内存中存储,值与值之间是独立存在的,修改一个变量的值不会影响到其它变量的值。
比如:

var a=10;
var b=a;
a++;
console.log(b);//10
console.log(a);//11

原理如下图:
image

对象(引用数据类型)是保存在堆内存中的

每创建一个新的对象,就会在堆内存中开辟出一个新的内存空间,而变量保存的是对象在堆中的内存地址(对象的引用,类似指针),如果两个变量保存的是同一个对象的引用,当通过其中一个变量修改属性时,另一个也会收到影响,因为他们两个变量都指向堆内存中的同一对象。
比如:

var obj=new Object();
obj.name="张三";
var obj2=obj;
obj2.name="李四";
console.log(obj.name);//李四
console.log(obj2.name);//李四

原理图如下

没有改属性前

image

改了属性后

image

对变量obj2重新赋值为null
var obj=new Object();
obj.name="张三";
var obj2=obj;
obj2.name="李四";
obj2=null;
console.log(obj);
console.log(obj2);

结果如图:
image
原理是因为对变量重新赋值相当于在栈中把obj2对应的值修改了,并没有修改到堆中的对象的属性,相当于仅仅只是把原本存的堆中对象的引用给替换为了其它值,使obj2与堆中的对象失去了联系。
如图:
image

重新创建两个对象
var obj3=new Object();
obj3.name="张三";
var obj4=new Object();
obj4.name="张三";
console.log(obj3==obj4);//结果为false;

原理:
当比较两个基本数据类型的值时,就是比较值。
而比较两个引用数据类型时,它是比较的对象的内存地址。即使两个对象是一模一样的,但是地址不同,它也会返回false。
image

总结,基本数据类型保存的是值,引用数据类型保存的是引用(地址)
posted @ 2022-03-11 20:38  青仙  阅读(116)  评论(0编辑  收藏  举报