JS-值类型和引用类型
JS-值类型和引用类型
-
简单数据类型:值类型,变量存储的是值本身
- Number 数字类型
- String 字符串类型
- Boolean 布尔类型
- undefined 未定义,变量只声明,未赋值
- null 空类型,变量已赋值,但是赋值的是一个空数据(还未被创建出来的对象)
-
复杂数据类型:引用类型,变量存储的是内存地址
- Array 数组
- function 函数
- Object 对象
简单理解变量存储的是内存地址:比如对象,开辟一个对象的内存空间需要非常大的内存空间,大到栈内存无法提供,于是就去堆内存中开辟,就好像买房子,房子不能直接给你,于是给你一把钥匙,通过这把钥匙能找到房门去开启。
值类型和引用类型的赋值规则
-
值类型:由于变量存储的是值本身,因此赋值也是值本身
-
引用类型:由于变量存储的是内存地址,因此赋值也是内存地址
简单理解赋值也是内存地址:比如上例的买房子,现在我想居住这间房子,就需要旧对象复制一把钥匙给我,于是我通过这把钥匙可以打开房门。我在这间房子里做的任何改动,旧对象通过钥匙开启了房门之后都可以看得到,比如我拿走了这间房子的一个枕头,旧对象就能发现房子里少了一个枕头。
小练习
let a = []
let b = a
console.log(a === b) // true 因为赋值的是内存地址,a把钥匙复制了一份给了b,找到同一间房子
let c = {}
let d = c
console.log(c === d) // true
console.log({} === {}) // false 因为开辟了两个堆内存空间
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!