JavaScript中的数据类型以及存储上的差别

news/2025/1/21 22:01:19/文章来源:https://www.cnblogs.com/bbhhh/p/18684533

JavaScript是一种动态类型语言,其变量可以在不同类型之间转换。理解JavaScript中的数据类型以及它们在存储上的差别对于编写高效、健壮的代码至关重要。本文将详细介绍JavaScript的基本数据类型、复杂数据类型以及它们的存储特性。

一、JavaScript中的数据类型

1.1 基本数据类型

基本数据类型(也称为原始数据类型)是不可变的,直接存储在栈内存中。JavaScript中有以下几种基本数据类型:

  1. Number:表示数字,包括整数和浮点数。
  2. String:表示文本数据。
  3. Boolean:表示逻辑值,只有 true和 false两个取值。
  4. Undefined:表示未定义的值。
  5. Null:表示空值或无效值。
  6. Symbol:表示唯一且不可变的值。
  7. BigInt:表示任意精度的整数。

1.2 复杂数据类型

复杂数据类型(也称为引用数据类型)是可变的,存储在堆内存中,变量存储的是对内存地址的引用。JavaScript中的复杂数据类型包括:

  1. Object:表示对象,包括普通对象、数组和函数等。

二、基本数据类型的存储

2.1 栈内存

基本数据类型存储在栈内存中,栈内存具有以下特点:

  1. 内存空间小:适合存储小数据。
  2. 访问速度快:由于栈内存是线性分配的,访问速度非常快。
  3. 自动管理:当变量超出作用域时,内存会自动释放。

2.2 基本数据类型的示例

let num = 42;         // Number
let str = "Hello";    // String
let bool = true;      // Boolean
let undef;            // Undefined
let nul = null;       // Null
let sym = Symbol();   // Symbol
let bigInt = 123n;    // BigInt
​
 
 

在上述示例中,numstrboolundefnulsym和 bigInt都存储在栈内存中。

三、复杂数据类型的存储

3.1 堆内存

复杂数据类型存储在堆内存中,堆内存具有以下特点:

  1. 内存空间大:适合存储大量复杂数据。
  2. 访问速度慢:由于堆内存是非线性分配的,访问速度相对较慢。
  3. 手动管理:需要通过垃圾回收机制来管理内存。

3.2 复杂数据类型的示例

let obj = {name: "Alice", age: 30};  // Object
let arr = [1, 2, 3, 4, 5];           // Array
let func = function() { return "Hello"; };  // Function
​
 
 

在上述示例中,objarr和 func存储在堆内存中,而变量 objarr和 func本身在栈内存中保存了对堆内存中实际数据的引用。

四、基本类型与复杂类型的差别

4.1 赋值操作

基本数据类型的赋值是值复制,修改副本不会影响原变量。

let a = 10;
let b = a;
b = 20;
console.log(a);  // 输出: 10
​
 
 

复杂数据类型的赋值是引用复制,修改副本会影响原变量。

let obj1 = {name: "Alice"};
let obj2 = obj1;
obj2.name = "Bob";
console.log(obj1.name);  // 输出: Bob
​
 
 

4.2 比较操作

基本数据类型的比较是值比较。

let x = 5;
let y = 5;
console.log(x === y);  // 输出: true
​
 
 

复杂数据类型的比较是引用比较。

let obj3 = {name: "Alice"};
let obj4 = {name: "Alice"};
console.log(obj3 === obj4);  // 输出: false
​
 
 

4.3 内存管理

基本数据类型存储在栈内存中,由JavaScript引擎自动管理。复杂数据类型存储在堆内存中,通过垃圾回收机制管理内存。

五、总结

JavaScript中的数据类型分为基本数据类型和复杂数据类型。基本数据类型存储在栈内存中,具有较快的访问速度和自动内存管理的特点。复杂数据类型存储在堆内存中,适合存储大量和复杂的数据,但访问速度较慢,需要垃圾回收机制来管理内存。理解这些数据类型的存储差异,有助于编写高效且健壮的代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/873008.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java开发】简化Maven项目依赖:优雅去除未使用Jar包

一、为什么要做这件事? 自从我踏入职场,便历经了技术革新的数次浪潮。从最初的.Net Framework、Winform、WPF,到Asp.Net MVC、Asp.Net MVC WebApi,再到Asp.Net Core 2.x的广泛应用,我始终深耕于.net领域。 然而,随着技术的不断演进,我逐渐发现.net相关的工作机会变得稀少…

《操作系统真相还原》实验记录2.7——生产者与消费者问题

本节实现内容如下: ① 环形缓存区的结构体创建; ② 环形键盘缓冲区的创建; ③ 生产者消费者问题剖析;一、生产者与消费者问题简述我们知道,在计算机中可以并行多个线程,当它们之间相互合作时,必然会存在共享资源的问题,这是通过“线程同步”来解决的,而诠释“线程同步…

CTF-web第一步!

本次的题比较简单,适合我这种入门学者。CTF菜狗杯的web2 c0me_t0_s1gn。进入靶场打开F12会得到前一半。在控制台复制函数give_flag()会得到另一半。 这样就完成了。

P1183 多边形的面积-向量的用法

原题链接 https://www.luogu.com.cn/problem/P1183 题目描述 给出一个没有缺口的简单多边形,它的边是垂直或者水平的,要求计算多边形的面积。 xOy 的笛卡尔平面上,它所有的边都平行于两条坐标轴之一。然后按逆时针方向给出各顶点的坐标值。所有的坐标值都是整数,因此多边形…

蓄水池漂浮物识别摄像机

蓄水池漂浮物识别摄像机具有高效的图像识别功能。通过高清晰度的摄像头捕捉到蓄水池表面的图像,并通过人工智能技术进行快速准确的漂浮物识别。这种摄像机可以自动检测出池面上的漂浮物,并生成相应报警信息。该摄像机支持多种智能算法分析,并通过智能算法对数据进行综合分析…

行为智能识别摄像机

行为智能识别摄像机通过结合人工智能技术和监控技术,实现了对各种行为动作的自动识别和分析,在提高安全性、减少事故发生率方面具有重要意义。随着科技的不断进步和应用范围的扩大,相信这种先进设备将会在更多领域得到广泛应用。行为智能识别摄像机是一种结合了人工智能技术…

AI人数智能统计监测摄像头

AI人数智能统计监测摄像头具有高效的图像识别功能。通过先进的图像处理算法,可以快速准确地识别出场景中的人群,并进行实时统计。无论是密集的人流场所还是较为稀疏的区域,这种摄像头都能够精准地进行人数统计,为管理者提供重要参考信息。AI人数智能统计监测摄像头具有实时…

Android 中的卡顿丢帧原因概述 - 方法论

Android 手机使用中的卡顿问题 , 一般来说手机厂商和 App 开发商都会非常重视 , 所以不管是手机厂商还是 App 开发者 , 都会对卡顿问题非常重视 , 内部一般也会有专门的基础组或者优化组来进行优化 . 目前市面上有一些非常棒的第三方性能监控工具 , 比如腾讯的 Matrix ; 手机厂…

JavaScript的常用库 —— jQuery

利用JS去操控HTML和CSS,常用库之jQuery ฅʕ•̫͡•ʔฅjQuery用来更加方便地去控制前端的HTML标签和CSS属性。使用方式:1. 直接在<head>元素中添加: <script src="https://cdn.acwing.com/static/jquery/js/jquery-3.3.1.min.js"></script> 2…

2 FreeRTOS移植

2 FreeRTOS移植 2.1 源码基本认识获取源码。官网地址:FreeRTOS™ - FreeRTOS™ 源码内文件结构:1) FreeRTOS文件夹结构2) Source文件夹结构3) portable文件夹结构 portable文件夹里面有编译器、内核环境可以选择。其中keil是我们使用的编译器类型,但Keil文件夹里只有一个…

22蓝帽初赛

参考wp:http://mp.weixin.qq.com/s?__biz=Mzk0MTQzNjIyNg==&mid=2247487196&idx=1&sn=48094c5a78749b45c3598ed51a5df0e3&chksm=c3901b8acd56bc2d1d06b323e9d1e86b90048a35dc3b3301b60bb1f488a764f0b52ebc490113&mpshare=1&scene=23&srcid=01218…

【Azure APIM】APIM服务配置网络之后出现3443端口不通,Management Endpoint不健康状态

如果没有关联的网络安全组,则阻止所有网络流量通过子网和网络接口。问题描述 APIM服务在配置网络之后,查看网络状态发现Management Endpoint是不健康状态, 提示无法连接到3443端口。错误消息: Failed to connect to management endpoint at xxxxxxxx.management.azure-api.…