返回

基本类型与引用类型,JavaScript 变量奥秘的探寻之旅

前端

上次我们对 JavaScript 中的变量,在内存中的存储形式有了一定的了解。内存空间分为两种:栈内存与堆内存。下面我们从一个问题出发,引出我们的主题“基本数据与引用类型”,开启我们的探索之旅吧!

##基本类型与引用类型的区分

变量的类型

JavaScript中变量可以分为两种类型:基本类型和引用类型。基本类型包括number、string、boolean和null。引用类型包括object、array、function。

基本类型的值直接存储在变量中,而引用类型的值则存储在堆内存中,变量中存储的是该值的内存地址。这意味着基本类型变量的值是不可变的,而引用类型变量的值是可变的。

基本类型与引用类型比较

基本类型和引用类型在以下几个方面存在差异:

特性 基本类型 引用类型
值的存储 直接存储在变量中 存储在堆内存中,变量中存储的是该值的内存地址
值的可变性 不可变 可变
比较方式 按值比较 按引用比较
赋值方式 复制值 复制引用
传递方式 按值传递 按引用传递

基本类型变量

基本类型变量的值直接存储在变量中。这意味着当您对基本类型变量进行赋值时,新的值会覆盖旧的值。例如:

let a = 10;
a = 20;
console.log(a); // 输出:20

引用类型变量

引用类型变量的值存储在堆内存中,变量中存储的是该值的内存地址。这意味着当您对引用类型变量进行赋值时,新的值不会覆盖旧的值。相反,新的值会存储在堆内存中,变量中的内存地址会指向新的值。例如:

let a = [1, 2, 3];
a = [4, 5, 6];
console.log(a); // 输出:[4, 5, 6]

##基本类型与引用类型的转换

您可以使用内置函数将基本类型转换为引用类型,反之亦然。

基本类型转换为引用类型

要将基本类型转换为引用类型,可以使用以下函数:

  • Number():将数字转换为 Number 对象。
  • String():将字符串转换为 String 对象。
  • Boolean():将布尔值转换为 Boolean 对象。

例如:

let a = 10;
a = new Number(a);
console.log(a); // 输出:Number {[[PrimitiveValue]]: 10}

引用类型转换为基本类型

要将引用类型转换为基本类型,可以使用以下函数:

  • .valueOf():返回对象的原始值。
  • .toString():返回对象的字符串表示形式。
  • .toNumber():返回对象的数字表示形式。
  • .toBoolean():返回对象的布尔表示形式。

例如:

let a = new Number(10);
a = a.valueOf();
console.log(a); // 输出:10

##总结

在 JavaScript 中,变量可以分为基本类型和引用类型。基本类型包括number、string、boolean和null。引用类型包括object、array、function。

基本类型的值直接存储在变量中,而引用类型的值则存储在堆内存中,变量中存储的是该值的内存地址。这意味着基本类型变量的值是不可变的,而引用类型变量的值是可变的。

您可以使用内置函数将基本类型转换为引用类型,反之亦然。