值类型和引用类型

2023-10-28
2分钟阅读时长

简介

在 JavaScript 中,值类型和引用类型是两种不同的数据类型分类。

值类型(Primitive Types)是指存储简单数据值的变量,它们被直接存储在栈内存中。JavaScript 中的值类型包括:布尔值(boolean)、数字(number)、字符串(string)、null、undefined 和 Symbol。

引用类型(Reference Types)是指存储对象的引用的变量,而不是实际的对象本身。引用类型的值存储在堆内存中,并且存储在变量中的值是该对象的地址。JavaScript 中的引用类型包括:对象(Object)、数组(Array)、函数(Function)等。

区别

存储位置:值类型的值直接存储在栈内存中,而引用类型的值存储在堆内存中,变量中存储的是对象的引用。

复制方式:值类型的赋值是通过复制变量的值进行的,而引用类型的赋值是复制对象的引用,两个变量最终引用同一个对象。

比较方式:值类型的比较是按值进行比较,只要值相等就认为相等;而引用类型的比较是按引用进行比较,只有当两个变量引用同一个对象时才认为相等。

可变性:值类型是不可变的,一旦创建就不能修改其值;而引用类型是可变的,可以修改对象的属性或方法。

传递方式:值类型作为函数参数时,是将值复制给新的变量;引用类型作为函数参数时,是将对象的引用复制给新的变量,函数内部对该对象的修改会影响到原始对象。

特殊说明

需要注意的是,在 JavaScript 中,字符串、数字和布尔值在赋值过程中表现得像值类型,但它们实际上是封装成了对象,因此具有一些对象的特性。