【值类型和引用类型的区别】

值类型和引用类型的区别

  • 在js中变量分为两种:值类型(基本数据类型)和引用类型

    • 值类型:string、number、boolean、null、undefined和symbol类型

    • 引用类型:Object(对象)、Array(数组)和Function(函数)

  • 值类型和引用类型的区别:

    1. 变量的存储方式不同:

      当我们声明一个变量的时候,变量是以key-value的方式储存在内存中的,内存又有栈内存和堆内存。

      值类型和引用类型在内存中的储存方式是不一样的,值类型的变量储存在栈内存中,key储存的是变量的名称,value储存的是变量的值,例如声明变量 let a = 100,它在栈内存中是这样存放的:

在这里插入图片描述
而引用类型变量的储存方式就比值类型的复杂一些了,例如当声明一个对象类型的变量的时候,javascript虚拟机会在栈内存和堆内存中都开辟一块空间,把变量的值存放到堆内存中,变量名称存放到栈内存的key中,栈内存中的value存放的是内存地址,这个内存地址指向堆内存存放对象内容的地址。
在这里插入图片描述
2. 拷贝方式不同:
值类型在拷贝的时候拷贝的是变量的值,新变量和原来的变量之间是独立的,互不干扰。
在这里插入图片描述
而引用类型是浅拷贝,拷贝的是引用地址,所以新变量和原来的变量指向的是同一个对象,当其中的一个变量修改了对象的内容时,另一个变量也会发生改变。‘
在这里插入图片描述

  1. 比较方式不同:

    值类型的比较是值的比较,当比较它们的值相等时,就是相等,比较时注意 == 和 ===,使用 == 进行比较时做了类型转换, 当变量的值相等时就视为相等,而使用 === (全等)进行比较时,会比较值和类型是否都相等,只有在值和类型都相等时才是相等。

    引用类型比较的是引用地址,即使两个对象的属性和值一模一样,它们也不一定相等。

猜你喜欢

转载自blog.csdn.net/m0_37873510/article/details/126363794