js:基本数据类型和引用数据类型

87 阅读2分钟

基本数据类型和引用数据类型

基本数据类型指的是简单的数据段,引用数据类型指的是由多个值构成的对象。

当我们把变量赋值给一个变量时,解析器会先确认这个值是基本数据类型还是引用数据类型

基本数据类型

基本类型:string、boolean、number、null、undefined。

基本数据类型是按值访问的,基本数据类型的类型名和值存在栈中,可以直接操作。

var a=10
var b=a
console.log(a)//10

b获取的是a值的一份拷贝,b是保存了a复制的一个副本,所以b的改变,对a没有影响。

栈.jpg

引用数据类型

引用基本类型:object(数组,方法,对象)

引用数据类型在栈中存储了该对象在堆内存的引用地址,对象的内容存储在堆中,你不可以直接访问堆内存空间中的位置和操作堆内存空间。只能操作对象在栈内存的引用地址。

var  obj1=new  Object()
var obj2=obj1
obj2.name='123'
console.log(obj1.name)//123

说明这两个引用数据类型指向了同一个堆内存对象,obj1赋值给obj2的是obj1在栈内存的引用地址。

实际上他们共同指向了同一个堆内存对象,实际上改变的是堆内存对象。

堆.jpg

区别总结

声明变量时不同的内存分配

基本数据类型:存储在栈中的简单数据段; 引用数据类型:存储在堆中的对象,存储在栈中的值是一个指针,指向 存储对象的内存地址。

不同的内存分配机制也带来了不同的访问机制

基本数据类型:能够直接访问到 引用数据类型:JavaScript中是不允许直接访问保存在堆内存中的对象的,所以访问时,先访问的是 这个对象在堆内存中的地址,然后在按照这个地址来获取这个对象的值。

复制变量时的不同

基本数据类型:复制一个副本,两个变量完全独立。 引用数据类型:会把内存地址复制给对方,两个变量都指向了堆内存中的同一个对象。 :