在 JavaScript 中也会将基本类型与对象类型称为值类型与引用类型。这个是因为基本类型中存储的是数据完整的值,而在引用类型中存储的仅是指向数据的一个地址。

在大部分编程语言中,变量会被存放在两个地方,栈(stack)和堆(heap)。在 JavaScript 中栈存放的就是值类型和存放引用类型的地址,而引用类型真正的数据被存放在堆中。

当我们定义以下变量时,它们在内存中的栈堆中的存在如图所示:

let name = "鸣人"
let age = 18

function sayHello() {
    alert("你好~")
}

let person = {
    name: "宁次",
    age: 20,
}

let students = ["鸣人", "路飞", "柯南"]

image

$$warning string 类型数据实际上应该是存放在堆中,但因其内部实现细节被隐藏了,使用时与栈中的数据无异,所以上图将其放在栈的一列。 $$