原始类型和引用类型在内存中的区别是什么?

核心区别

特性 原始类型 引用类型
存储位置 栈内存(Stack) 堆内存(Heap)
存储内容 值本身 指向堆内存的引用地址
赋值行为 值拷贝(深拷贝) 引用拷贝(浅拷贝)
大小 固定,占空间小 不固定,可动态变化
生命周期 函数结束自动回收 由 GC 管理

赋值行为对比

// 原始类型 — 值拷贝
let a = 10
let b = a
b = 20
console.log(a)  // 10(互不影响)

// 引用类型 — 引用拷贝
let obj1 = { name: 'Tom' }
let obj2 = obj1
obj2.name = 'Jerry'
console.log(obj1.name)  // 'Jerry'(指向同一对象)

函数参数传递

JavaScript 只有值传递,但引用类型传递的是地址的副本:

function modify(obj) {
  obj.name = 'modified'   // 修改同一对象,外部可见
  obj = { name: 'new' }   // 重新赋值,不影响外部
}
let data = { name: 'original' }
modify(data)
console.log(data.name)  // 'modified'

同分类其他题目