当前位置: 首页 > news >正文

基本数据类型和引用类型的存储位置问题+复制问题

基本数据类型和引用类型的存储位置问题+复制问题

      • 1.存储位置
      • 2. 复制行为
      • 3. 与引用类型的对比
      • 总结

在JavaScript中,基本数据类型( numberstringbooleannullundefinedsymbolbigint

1.存储位置

  • 基本数据本身:直接存储在 栈内存(Stack Memory)中。
    栈内存适合存储轻量、固定大小的数据,且生命周期与作用域绑定(如函数执行结束即释放)。
  • 例外情况
    某些情况下,引擎可能将基本类型数据存储在堆内存(Heap Memory)中,例如:
    • 当基本类型数据被闭包长期引用时(需延长生命周期)。
    • 非常大的字符串 bigint (引擎可能优化内存分配)
      但这些细节由JavaScript引擎内部管理,对开发者透明,逻辑上仍表现为“按值访问”。

2. 复制行为

  • 直接复制值
    当复制基本类型数据(如let b = a)时,会在栈内存中创建一独立的新副本,与原数据完全隔离,修改其中一个变量,不会影响另一个。
let a = 10;
let b = a; //栈中创建新副本,b=10
a = 20; // 修改a, b仍为10
  • 逻辑上的“不可变性”
    基本类型值本身不可变(如字符串修改会创建新值),因此复制的本质是值的“拷贝”,而非引用传递。

3. 与引用类型的对比

  • 引用类型(如对象、数组):
    • 数据本体储存在堆内存中。
    • 变量存储的是堆内存地址(指针),指针本身在栈中。
    • 复制时传递指针(地址),而非数据本身,导致多个变量指向同一数据。

总结

类型存储位置复制行为
基本类型栈内存(通常)创建独立副本,按值传递
引用类型堆内存(数据本体)+ 栈内存(指针)复制指针,共享同一数据
  • 基础类型的复制会创建该值的一个副本。
  • 引用类型的复制只会复制指针,复制后的变量和付之前的变量都指向同一个对象。

JavaScrip引擎可能堆基本数据类型的存储进行优化(如堆存储大字符串),但开发者只需理解逻辑行为,基本数据类型按值复制,引用类型按引用复制

相关文章:

  • 在VMware中安装虚拟机Ubuntu
  • 文件流---------获取文件的内容到控制台
  • 火影 遇上 python Baby_Brother_GGY
  • TypeScript 的 interface 接口
  • 文件上传靶场
  • 类型转换
  • ArkTS基础语法:从声明到类型的深度解析
  • 系统与网络安全------网络通信原理(5)
  • nlp面试重点
  • 算法差分详解 + 总结
  • lx2160 LSDK21.08 firmware 笔记 - 1.bl31.bin 链接脚本 bl31.ld.S 分析
  • JavaWeb 课堂笔记 —— 09 MySQL 概述 + DDL
  • 基于贝叶斯方法的地震动分析及AI拓展
  • mysql安装-MySQL MGR(Group Replication)+ ProxySQL 架构
  • 前端 react+ant design ,后端 springboot +mysql+redis 全栈项目零基础小白从服务器初始化开始部署上线超详细保姆级教程
  • Ubuntu24.04 编译 Qt5 和 Qt6 源码
  • Android Cmake构建的项目,需不需要配置指定ndk及版本
  • 动态路由, RIP路由协议,RIPv1,RIPv2
  • MarkDown 输出表格的方法
  • 信息安全管理与评估2022国赛正式卷一阶段答案截图
  • “女硕士失踪13年生两孩”案进入审查起诉阶段,哥哥:妹妹精神状态好转
  • 女外交官郑璇已任中国驻莫桑比克大使
  • 美国拟向阿联酋和沙特AI公司出口数十万枚芯片
  • 茅台回应“茅台1935脱离千元价位带竞争”:愿与兄弟酒企共同培育理性消费生态
  • 文学花边|对话《借命而生》原著作者石一枫:我给剧打90分
  • 科学家用AI寻找外星生命