【JavaScript】简单数据类型 与 复杂数据类型 ① ( 堆内存和栈内存 | 简单数据类型内存存储 | 复杂数据类型内存存储 )

文章目录

  • 一、简单数据类型
    • 1、简单数据类型简介
    • 2、简单数据类型 null 空类型的特殊性
  • 二、复杂数据类型
  • 三、堆内存和栈内存





一、简单数据类型




1、简单数据类型简介


JavaScript 中 , " 简单数据类型 “ 又称为 ” 基本数据类型 " 或 " 值类型 " , 与 简单数据类型 相对的 " 复杂数据类型 “ 又称为 ” 引用类型 " ;


简单数据类型 在 内存中存储时 , 存储的是 数据值 本身 ;

如 : 存储 number 数字类型的值 888 , 在内存中存储的就是值 888 ;

简单数据类型包括 :

  • string 字符串类型
  • number 数字类型
  • boolean 布尔类型
  • undefined 未定义类型
  • null 空类型

2、简单数据类型 null 空类型的特殊性


null 空类型 比较特殊 , 使用 typeof 运算符获取 null 类型变量的类型时 , 返回的是 object 类型 , 也就是说这是一个 " 空对象 " ;


null 空类型使用场景 : null 空类型 是一个 object 类型 , 可以理解为 " 空对象 " ;

如果定义一个变量 , 想要存储一个对象 , 但是此时对象没有进行赋值 , 可以先赋值为 null 值 ;


代码示例如下 :

        // 空类型变量
        var nullVar = null;

        // 输出 : object
        console.log(typeof nullVar);

完整代码 :

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <!-- 设置 meta 视口标签 -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no,maximum-scale=1.0,minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>JavaScript</title>
    <style></style>
    <script>
        // 空类型变量
        var nullVar = null;

        // 输出 : object
        console.log(typeof nullVar);
    </script>
</head>

<body>
</body>

</html>

在这里插入图片描述





二、复杂数据类型



复杂数据类型 又称为 引用数据类型 ;

复杂数据类型 在内存中存储时 , 在 栈内存 中 存储的是 堆内存中的地址 , 在 堆内存 中 存储的是 复杂数据类型 的 数据内容 ;

栈内存中存储的地址 指向 堆内存中的数据 ;


复杂数据类型 都是 通过 new 关键字创建的对象 , 这个对象既包括 JavaScript 提供的内置对象 , 也包括用户自己自定义的对象 ;





三、堆内存和栈内存



栈内存 Stack 和 堆内存 Heap 是 内存管理 的 两种主要方式 ;


栈内存 由 操作系统 进行管理 , 自动进行 内存分配 和 内存释放 ;

函数的 参数值 / 局部变量 等值 , 存储到 栈内存中 ;

简单数据类型 的 值 , 直接存储到 栈内存 中 ;


堆内存 由 开发者 手动进行 内存分配 和 内存释放 ;

在高级语言中 , 开发者不进行手动释放 , 由 垃圾回收机制 完成堆内存的回收 ;

复杂数据类型 的 值 , 存储到 堆内存中 , 存储复杂数据类型后 对应的 堆内存的地址 存储到 栈内存 中 ;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL-分组函数

041-分组函数 重点&#xff1a;所有的分组函数都是自动忽略NULL的 分组函数的执行原则&#xff1a;先分组&#xff0c;然后对每一组数据执行分组函数。如果没有分组语句group by的话&#xff0c;整张表的数据自成一组。 分组函数包括五个&#xff1a; max&#xff1a;最大值mi…

Ecovadis认证准则

Ecovadis准则是一个国际性的企业社会责任(CSR)评估平台&#xff0c;旨在帮助企业、投资者、供应商和利益相关者等评估和管理其全球供应链的社会和环境影响。该准则涵盖了可持续性、人权、劳工权利、环境保护等方面的评估内容&#xff0c;为企业提供了全面的评估标准和管理工具&…

从客户端WebAPI视角下解读前端学习

API 应用程序接口&#xff08;API&#xff0c;Application Programming Interface&#xff09;是基于编程语言构建的结构&#xff0c;使开发人员更容易地创建复杂的功能。它们抽象了复杂的代码&#xff0c;并提供一些简单的接口规则直接使用。 JavaScript VS 客户端 API VS 客…

Buffer

Buffer 概念 在Node.js中&#xff0c;Buffer是一个非常重要的内置全局对象&#xff0c;Node.js是基于Chrome V8引擎构建的&#xff0c;V8引擎本身不支持处理二进制数据&#xff0c;因此Node.js引入Buffer来弥补这一不足&#xff0c;Buffer中文译为【缓冲区】&#xff0c;是一…

视觉系统辅助引导在激光导航AGV中应用

agv 在全球经济步入“寒冬”的大背景下&#xff0c;大量传统制造业企业开始谋划转变。通过引入AGV系统提升厂内物流效率、降低运营成本&#xff0c;已经成为制造业升级的趋势之一。 AGV是移动机器人的一个重要分支&#xff0c;具有并行作业、自动化、智能化和柔性化等优势&…

centos8 中文打印报错,解决

sudo yum install -y glibc-locale-source sudo localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8 sudo yum install -y fontconfig

入门Consul注册、配置中心(代码演示)

1、安装与使用 2、注册服务到consul 3、调用consul上注册的服务 4、配置中心 1、安装与使用 官网地址&#xff1a;Install | Consul | HashiCorp Developer 下载对应的系统 解压缩后文件 打开命令行运行 consul.exe agent -dev 即可运行 可以编写一个bat脚本每次运行ba…

bdcn手顺

GitHub链接 https://github.com/pkuCactus/BDCN 环境配置(Prerequisites) Python 3.8 contourpy1.1.1 cycler0.12.1 filelock3.14.0 fonttools4.53.0 fsspec2024.6.0 importlib_resources6.4.0 intel-openmp2021.4.0 Jinja23.1.4 kiwisolver1.4.5 Mark…

扩展方块加载动画

效果图: 完整代码: <!DOCTYPE html> <html> <head><meta charset="UTF-8" /><title>扩展方块加载动画</title><style type="text/css">body {background: #ECF0F1;display: flex;justify-content: center;al…

mysql-community-libs-5.7.44-1.el7.x86_64.rpm 的公钥尚未安装

在 CentOS 或 RHEL 系统上安装 RPM 包时&#xff0c;如果遇到“公钥尚未安装”的问题&#xff0c;通常是因为系统没有导入相应的 GPG 公钥。MySQL 官方提供了一个 GPG 公钥&#xff0c;用于验证 RPM 包的签名。 以下是解决该问题的步骤&#xff1a; 下载并导入 MySQL 官方的 GP…

跨境电商中的IP隔离是什么?怎么做?

一、IP地址隔离的概念和原理 当我们谈论 IP 地址隔离时&#xff0c;我们实际上是在讨论一种网络安全策略&#xff0c;旨在通过技术手段将网络划分为不同的区域或子网&#xff0c;每个区域或子网都有自己独特的 IP 地址范围。这种划分使网络管理员可以更精细地控制哪些设备或用…

shell条件测试和if语句

“C:\Users\Jessica\Desktop\6.12.assets\image-20240612094159578.png”# shell条件测试和if语句 一、条件测试 1、$? 返回码 判断命令或者脚本是否执行成功&#xff08;最近的一条&#xff09; 0 true 为真就是成功 成立 非0 false 失败或者异常 2、test命令 可以进行…

Qt程序打包成单个exe文件

文章目录 0. 准备工作1. 使用 windeployqt 提取必要的动态链接库和资源文件1.1 操作步骤1.2 补充 2. 使用 Enigma Virtual Box将文件夹打包成单个exe2.1 操作步骤 0. 准备工作 Qt程序打包用到的工具有&#xff1a; windeployqt &#xff1a;安装Qt时自带Enigma Virtual Box 下…

探索Facebook对世界各地文化的影响

随着数字化时代的到来&#xff0c;社交媒体已成为连接世界各地人们的重要平台之一。而在这个领域的巨头之一&#xff0c;Facebook不仅是人们沟通交流的场所&#xff0c;更是一座桥梁&#xff0c;将不同地域、文化的人们联系在一起。本文将探索Facebook对世界各地文化的影响&…

Alienware外星人X17R2 原装Win11系统镜像下载 带SupportAssist OS Recovery一键恢复

装后恢复到您开箱的体验界面&#xff0c;包括所有原机所有驱动AWCC、Mydell、office、mcafee等所有预装软件。 最适合您电脑的系统&#xff0c;经厂家手调试最佳状态&#xff0c;性能与功耗直接拉满&#xff0c;体验最原汁原味的系统。 原厂系统下载网址&#xff1a;http://w…

Ecovadis认证咨询公司丨ecovadis认证对化学工业产品管理要求

EcoVadis是世界上最值得信赖的全球供应链业务可持续性评级、暂能和协作绩效改进工具提供商。在强大的技术平台和全球领域专家团队的支持下&#xff0c;EcoVadis易于使用和可操作的可持续性记分卡提供了对200多个采购类别和160多个国家/地区的环境、社会和道德风险的详细洞察。 …

一个小的画布Canvas页面,记录点的轨迹

Hello大家好&#xff0c;好久没有更新了&#xff0c;最近在忙一些其他的事&#xff0c;今天说一下画布canvas&#xff0c;下面是我的代码&#xff0c;实现了一个点从画布的&#xff08;0,0&#xff09;到&#xff08;canvas.width&#xff0c;canvas.height&#xff09;的一个实…

【iOS】UI学习——界面切换

界面切换 push和poppresent和dismiss示例程序 push和pop 在 Objective-C 中,pop 和 push 通常是与 UINavigationController 一起使用的方法,用于控制导航栈中视图控制器的跳转和回退。 push 和 pop 通常成对使用,用于实现导航栈的前进和后退功能。当用户进入新的视图控制器时…

一种新的一维时间序列信号盲解卷积算法(以旋转机械故障诊断为例,MATLAB环境)

一种新的一维时间序列信号盲解卷积算法&#xff08;以旋转机械故障诊断为例&#xff0c;MATLAB环境&#xff09;&#xff0c;可作为深度学习信号前处理过程&#xff0c;水个SCI不是问题。 机械设备的状态信号中往往蕴含着大量的设备异常信息。如何从繁多的机械状态信号中提取足…

C++ 10 之 引用

c10引用.cpp #include <iostream>using namespace std;int main() {// 引用的语法&#xff1a;类型 &别名 原名// int a 10;// int &b a; // 此时a,b指向同一块内存// cout << "a: " << a << endl;// cout << "b: &…