📜  原始类型与引用类型 (1)

📅  最后修改于: 2023-12-03 14:50:31.651000             🧑  作者: Mango

原始类型与引用类型

在编程语言中,常见的两种数据类型是原始类型和引用类型。这两种类型在如何声明、存储和访问数据方面有很大的区别,理解这些区别对于编写高效的代码非常重要。

原始类型

原始类型指的是一些基本的数据类型,如数字、布尔值和字符等。在 JavaScript 中,有六种原始类型:

  • Number
  • String
  • Boolean
  • Null
  • Undefined
  • Symbol

声明原始类型

声明原始类型变量时,只需要给变量名赋值一个原始类型的值即可,如:

let num = 1;
let str = "hello";
let bool = true;
let empty = null;
let undef = undefined;
let symbol = Symbol("hello");

原始类型的存储和访问

原始类型的值存储在栈内存中,直接访问栈中的数据即可。这也是原始类型比较快的原因之一。例如:

let a = 1;
let b = a;
b = 2;
console.log(a); // 1
console.log(b); // 2

上面的代码中,虽然 b 的值改变了,但是 a 的值不变,因为 ab 存储在栈内存中的不同位置。

引用类型

引用类型指的是一些非基本的数据类型,如对象、数组和函数等。在 JavaScript 中,对象是最常用的引用类型。

声明引用类型

声明对象时,需要使用 new 关键字创建一个实例对象。例如:

let obj = new Object();

还可以使用对象字面量的方式来创建对象:

let obj = {
  name: "joe",
  age: 18,
  sayHello: function () {
    console.log("hello");
  }
};

引用类型的存储和访问

引用类型的值不像原始类型的值那样直接存储在栈内存中,而是存储在堆内存中。给引用类型变量赋值时,实际上是将堆内存中的地址赋值给了变量。

let obj1 = { name: "joe", age: 18 };
let obj2 = obj1;
obj2.name = "kevin";
console.log(obj1.name); // "kevin"
console.log(obj2.name); // "kevin"

上面的代码中,obj2 实际上是 obj1 的引用,两个变量都指向同一个对象。因此,当修改 obj2 的属性时,obj1 的属性也被修改了。

总结

原始类型和引用类型在声明、存储和访问数据上有很大的区别。理解这些区别有助于编写高效的代码。