news 2026/4/26 4:33:43

JavaScript 有哪些数据类型?它们在内存里是怎么存的?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JavaScript 有哪些数据类型?它们在内存里是怎么存的?

JavaScript 的数据类型

JavaScript 是动态类型语言,变量类型由值决定。根据 ECMAScript 规范,JavaScript 有8 种数据类型(ES2020 后 BigInt 加入):

1. 基本数据类型(Primitive Types,共 7 种)

这些类型的值直接存储在栈(Stack)内存中,按值传递,占用固定大小。

  • Undefined:表示变量已声明但未赋值。只有一个值:undefined
  • Null:表示“空对象指针”。只有一个值:null
  • Boolean:布尔值。只有两个值:truefalse
  • Number:数字类型(包括整数和浮点数)。在 JS 中所有数字统一用IEEE 754 标准的 64 位双精度浮点数表示(即使是整数)。
  • String:字符串。不可变,长度可变。
  • Symbol(ES6 引入):唯一且不可变的标识符,用于对象属性键避免冲突。
  • BigInt(ES2020 引入):任意精度整数,用于表示超过Number.MAX_SAFE_INTEGER(2⁵³-1)的整数。字面量后加n,如123n
2. 引用数据类型(Reference Type,1 种)
  • Object:对象(包括普通对象、数组、函数、正则、Date 等)。值存储在堆(Heap)内存中,栈中只保存指向堆的引用地址,按引用传递。

它们在内存中的存储方式

JavaScript 引擎(如 V8、SpiderMonkey)使用栈内存堆内存来管理数据:

数据类型存储位置存储方式说明传递方式示例变量赋值行为
Undefined固定值,直接存值按值传递复制后独立
Null固定值(内部实现为特殊指针 0x00)按值传递复制后独立
Boolean固定值(true/false)按值传递复制后独立
Number64 位双精度浮点数(8 字节)按值传递复制后独立
String栈 + 堆小字符串可能优化存栈(V8 String Interning),长字符串指针指向堆中不可变对象按值传递复制后独立(字符串内容不可变)
Symbol栈 + 堆值唯一,内部在堆中维护全局 Symbol 注册表,变量存引用按值传递复制后独立(每个 Symbol 值唯一)
BigInt栈 + 堆小 BigInt 可能优化,大整数在堆中动态分配内存,栈存指针按值传递复制后独立
Object对象本体存堆中,变量在栈中存指向堆的引用地址按引用传递复制变量后指向同一对象,修改会相互影响
关键点说明:
  1. 基本类型:直接存值,赋值时复制一份新值,互不影响。

    leta=10;letb=a;b=20;console.log(a);// 10(不变)
  2. 引用类型:变量存的是堆地址,赋值时复制地址,指向同一对象。

    letobj1={name:'Alice'};letobj2=obj1;obj2.name='Bob';console.log(obj1.name);// 'Bob'(被修改)
  3. 字符串的特殊处理

    • 字符串是不可变的(immutable)。
    • V8 等引擎会使用字符串池(String Pool)内联存储优化短字符串,避免频繁分配堆内存。
  4. 类型检测

    • typeof:检测基本类型(typeof null异常返回"object"是历史遗留 bug)。
    • instanceof/Object.prototype.toString.call():更准确区分对象子类型。

总结表格

类型typeof 返回值存储位置是否可变传递方式
Undefined“undefined”-按值
Null“object”(bug)-按值
Boolean“boolean”不可变按值
Number“number”不可变按值
String“string”栈/堆不可变按值
Symbol“symbol”栈/堆不可变按值
BigInt“bigint”栈/堆不可变按值
Object“object” / “function”可变按引用

如果需要更深入探讨某个类型(如 BigInt 的底层实现或 V8 引擎的具体优化),欢迎继续提问!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 6:54:16

YOLO模型热更新机制:GPU服务不停机升级

YOLO模型热更新机制:GPU服务不停机升级 在现代工业视觉系统中,产线摄像头每秒都在生成海量图像数据,任何一秒的中断都可能导致成百上千件产品的检测遗漏。而与此同时,AI团队刚刚优化完一个新版本的YOLO模型——它在低光照场景下的…

作者头像 李华
网站建设 2026/4/23 17:17:03

YOLO模型训练成本太高?试试按Token付费的新模式

YOLO模型训练成本太高?试试按Token付费的新模式 在智能制造工厂的质检线上,一台工业相机每秒拍摄数十张PCB板图像,系统需要实时判断是否存在焊点虚焊、元件缺失等问题。传统做法是部署本地GPU服务器运行YOLO模型进行推理——但设备采购、环境…

作者头像 李华
网站建设 2026/4/22 1:00:28

学长亲荐10个AI论文软件,本科生轻松搞定毕业论文!

学长亲荐10个AI论文软件,本科生轻松搞定毕业论文! 从论文焦虑到轻松应对,AI 工具如何成为你的得力助手? 在当今学术环境中,撰写一篇高质量的毕业论文已经成为本科生不得不面对的挑战。无论是选题、资料收集、结构安排&…

作者头像 李华
网站建设 2026/4/19 0:52:17

YOLO模型镜像内置Profiler,一键诊断GPU性能瓶颈

YOLO模型镜像内置Profiler,一键诊断GPU性能瓶颈 在智能制造工厂的视觉质检线上,一台搭载YOLOv8m模型的工控机突然出现帧率暴跌——原本稳定的3ms/帧飙升至8ms,产线节拍被迫拉长。工程师紧急介入,却苦于缺乏有效工具:传…

作者头像 李华
网站建设 2026/4/20 5:44:45

YOLO在仓储物流中的应用:AGV导航依赖GPU加速YOLO

YOLO在仓储物流中的应用:AGV导航依赖GPU加速YOLO 在现代智能仓库里,你可能已经见过这样的场景:一排排自动导引车(AGV)沿着预定路径穿梭于货架之间,搬运托盘、避开行人、绕开临时障碍物——整个过程几乎无需…

作者头像 李华
网站建设 2026/4/24 23:53:59

YOLO模型镜像内置CUDA优化,开箱即用无需调参

YOLO模型镜像内置CUDA优化,开箱即用无需调参 在智能制造工厂的质检线上,一台工控机正以每秒60帧的速度分析着高速运转的电路板图像。每当检测到元件漏贴或偏移,系统立即触发报警并通知PLC停机——整个过程从图像采集到决策响应不到15毫秒。这…

作者头像 李华