📜  javascript 中的复杂类型和内存分配 - Javascript (1)

📅  最后修改于: 2023-12-03 15:01:40.514000             🧑  作者: Mango

JavaScript 中的复杂类型和内存分配

在 JavaScript 中,除了基本数据类型(如数字、字符串、布尔值等)之外,还存在复杂数据类型。这些复杂数据类型包括对象、数组、函数以及日期等。本文将介绍 JavaScript 中的复杂类型以及它们的内存分配方式。

对象

对象是 JavaScript 中最重要的复杂类型之一。对象可以通过花括号({})或 new Object() 方法来创建。对象可以包含属性和方法,属性和方法都是用键值对的形式保存的。

// 创建空对象
let obj1 = {};
let obj2 = new Object();

// 创建具有属性和方法的对象
let person = {
  name: 'Jack',
  age: 30,
  sayHello: function(){
    console.log('Hello, my name is ' + this.name);
  }
};

对象在内存中是以引用的方式表示的,即变量实际上只是指向对象的地址。当对象没有被任何变量引用时,它将被自动清除(垃圾回收)。

数组

数组也是 JavaScript 中常用的复杂类型之一。与对象不同的是,数组中的元素是按顺序排列的,且可以通过下标来访问。

// 创建空数组
let arr1 = [];
let arr2 = new Array();

// 创建带有元素的数组
let fruits = ['apple', 'orange', 'banana'];

与对象类似,数组也是以引用的方式保存在内存中的。当数组没有被任何变量引用时,它也将被垃圾回收。

函数

函数也是一种复杂类型,可以通过 function 关键字来定义。函数可以接收参数、执行一些操作,然后返回一个值。

// 定义函数
function sum(a, b) {
  return a + b;
}

// 调用函数
let result = sum(2, 3);
console.log(result); // 输出:5

与对象和数组不同的是,函数在被调用时,并不会被立即清除。它们的执行上下文会被保存在堆栈中,以及它们的变量和参数也会被保存在堆(作为闭包)中,直到所有引用它们的变量都离开了作用域。

日期

除了对象、数组和函数之外,JavaScript 还提供了一个 Date 对象,用于表示日期和时间。

// 创建 Date 对象
let today = new Date();
console.log(today); // 输出:当前日期和时间(例如:Tue Sep 14 2021 14:31:10 GMT+0800 (中国标准时间))

// 创建指定日期的 Date 对象
let christmas = new Date('2021-12-25');
console.log(christmas); // 输出:2021-12-24T16:00:00.000Z(UTC 时间)

与其他复杂类型类似,Date 对象是以引用的方式保存在内存中的。

结论

在 JavaScript 中,复杂类型(对象、数组、函数和日期)是非常重要的。它们都是以引用的方式保存在内存中的,当它们没有被任何变量引用时,它们将被垃圾回收。在编写 JavaScript 代码时,要注意这些复杂类型的内存分配方式,以避免出现内存泄漏等问题。