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

JavaScript数据类型和存储区别

目录

一、原始数据类型

二、引用数据类型

三、存储区别

四、常见错误


JavaScript是一种动态类型语言,这意味着变量可以在程序执行过程中改变其数据类型。了解JavaScript中的数据类型和它们的存储方式对于编写高效和可维护的代码至关重要。

在JavaScript中,数据类型可以分为原始数据类型(Primitive types)和引用数据类型(Reference types)。

一、原始数据类型

1. 字符串(String)

用于表示文本数据。

let str = "Hello, world!";

JavaScript中的字符串是不可变的。这意味着一旦创建了一个字符串,就不能修改它。在内部,字符串被表示为UTF-16字符的序列。每个字符都由2个16位数字表示,也就是一个“码点”。这些码点对应于Unicode字符集中的某个字符。

字符串的常见操作包括连接、查找子串、替换、分割等。

2. 数字(Number)

用于表示数值数据。

let num = 10;

JavaScript中的数字可以是整数或浮点数。在内部,数字被存储为IEEE 754双精度浮点数,可以表示很大的数值(例如1.7976931348623157e+308)和极小的数值(例如5e-324)。但是,由于JavaScript的数字是双精度浮点数,因此可能会遇到精度问题,例如无法准确表示0.1 + 0.2的值。

数字的常见操作包括算术运算(加、减、乘、除、取余等)、比较运算、数学函数等。

3. 布尔值(Boolean)

用于表示真或假的值。

let nullValue = null;

布尔值主要用于逻辑运算和条件判断。在JavaScript中,true和false是关键字,不能作为变量名使用。

布尔值的常见操作包括逻辑运算(与、或、非)、条件判断等。

4. 空值(Null)

表示一个空的或不存在的值。

let nullValue = null;

null是一个特殊的值,表示没有值或没有对象。它通常用于表示缺少数据或没有期望的值。在JavaScript中,null是一个关键字,不能作为变量名使用。

空值的常见使用场景包括表示一个未初始化的变量、表示一个不存在的对象等。

5. 未定义(Undefined)

表示未赋值或声明的变量。

let undefinedValue;

undefined是一个特殊的值,表示变量未被定义或未赋值。在JavaScript中,undefined是一个关键字,不能作为变量名使用。

未定义的常见使用场景包括声明未初始化的变量、访问未声明的变量等。

6. 符号(Symbol)

let name = Symbol("fx");  
typeof name; // 'symbol'  
console.log(name); // Symbol(fx)

Symbol值是通过Symbol函数创建的,每个Symbol值都是独一无二的,它们之间不会相等,即使它们的描述符相同。Symbol值可以作为对象的属性名使用,通过对象的Symbol属性访问。

二、引用数据类型

1. 对象(Object)

用于表示复杂的数据结构。

let obj = { name: "John", age: 25 };
  • 对象是用于表示复杂数据结构的数据类型。在JavaScript中,对象是一种无序的键值对的集合。
  • 对象在内存中以引用的形式存储,实际数据存储在堆内存中。当创建一个对象时,实际上是在堆内存中创建了一个新的对象实例。
  • 对象的属性可以包含基本数据类型、引用数据类型或其他对象。当访问对象的属性时,JavaScript会在堆内存中查找该属性,并返回其值。
  • 对象的使用非常广泛,可以用于表示各种复杂的数据结构,如用户信息、图形、文档等。

2. 数组(Array)

用于表示有序的数据集合。

let arr = [1, 2, 3, 4, 5];
  • 数组是一种特殊类型的对象,用于表示有序的数据集合。
  • 数组在内存中以引用的形式存储,实际数据存储在堆内存中。
  • 数组的元素可以通过索引访问,这些索引可以是数字或其他数据类型。
  • 数组常用于存储和处理数据集合,如排序、搜索等操作。

3. 函数(Function)

用于封装可重复使用的代码块。

function greet(name) {  console.log("Hello, " + name + "!");  
}
  • 函数是用于封装可重复使用的代码块的数据类型。
  • 函数在内存中以引用的形式存储,实际代码存储在堆内存中。
  • 当创建一个函数时,实际上是在堆内存中创建了一个新的函数实例。
  • 函数可以接受参数,并返回一个值。这个值可以是任何数据类型,包括基本数据类型和引用数据类型。
  • 函数可以访问和修改全局变量和其他函数的作用域。

4. 日期(Date)

用于表示日期和时间。

let currentDate = new Date();
  • 日期是一种引用数据类型,用于表示日期和时间。
  • 日期在内存中以引用的形式存储,实际数据存储在堆内存中。
  • JavaScript日期对象提供了许多操作日期和时间的属性和方法。

5. 正则表达式(Regular Expression)

用于匹配和处理文本。

let regex = /pattern/;
  • 正则表达式是一种引用数据类型,用于匹配和处理文本。
  • 正则表达式在内存中以引用的形式存储,实际表达式存储在堆内存中。
  • 正则表达式常用于字符串的搜索、替换、验证等操作。

三、存储区别

1. 原始数据类型

这些数据类型的值直接存储在内存中,因为它们的大小是固定的,不会改变。当这些值被引用时,它们会被复制到栈内存中,而不是直接引用原始数据。这种存储方式可以节省内存空间,因为不需要为每个引用创建新的内存空间。

2. 引用数据类型

这些数据类型的值在内存中以引用的形式存储,实际数据存储在堆内存中。当这些值被引用时,实际上是在栈内存中创建了一个指针或引用,指向堆内存中的对象。这种存储方式可以节省内存空间,因为多个引用可以共享同一个对象,避免了重复存储数据的浪费。

四、常见错误

1. 尝试修改不可变的数据类型。

例如,尝试修改字符串或数字的值会导致错误。

let str = "Hello, world!";  
str[0] = 'h'; // 错误,试图修改字符串的字符  
let num = 10;  
num = 15; // 错误,试图修改数字的值

2. 忽略undefined和null的区别。

undefined表示未定义的值,而null表示一个空值。在实际编程中,这两者经常被混淆。

let undefinedValue;  
console.log(undefinedValue); // 输出undefined  
let nullValue = null;  
console.log(nullValue); // 输出null

3. 对函数和对象的操作不匹配。

函数是一种特殊的数据类型,不能直接对函数进行一些对对象操作的操作,否则会抛出错误。

let func = function greet(name) { }; // 函数  
console.log(func.length); // 可以输出函数的参数个数,因为函数有length属性  
let obj = {}; // 对象  
console.log(obj.length); // 错误,对象没有length属性

4. 对引用类型的不当操作。

由于引用类型的值实际上是引用或指针,因此对它们的一些操作可能会导致意外结果或错误。例如,误用delete操作符会导致错误。

let obj = { name: "John", age: 25 }; // 对象  
delete obj.age; // 错误,delete操作符不能用于删除对象的属性  
console.log(obj.age); // 输出undefined,因为属性仍然存在,只是被删除了而已

相关文章:

JavaScript数据类型和存储区别

目录 一、原始数据类型 二、引用数据类型 三、存储区别 四、常见错误 JavaScript是一种动态类型语言,这意味着变量可以在程序执行过程中改变其数据类型。了解JavaScript中的数据类型和它们的存储方式对于编写高效和可维护的代码至关重要。 在JavaScript中&…...

Java学习笔记(七)——面向对象编程(中级)

一、IDEA (一)常用的快捷键 (二)模版/自定义模版 二、包 (一)包的命名 (二)常用的包 (三)如何引入(导入)包 (四&am…...

详细推导MOSFET的跨导、小信号模型、输出阻抗、本征增益

目录 前言 什么是跨导 什么是小信号模型 什么是输入阻抗和输出阻抗 什么是MOS管的输出阻抗 什么是MOS管的本征增益 共源极放大电路的输入和输出阻抗 一些其它MOS拓扑电路的增益 负载为恒流源 负载为二极管 前言 相信很多人在学习集成电路领域的时候 都对MOS管的…...

循环2作业

第一题 #include <stdio.h>int main() {int n,f,y,i,j;scanf("%d",&n);for(y0;y<100;y)for(f0;f<100;f)if(200*y2*ff*100y-n){printf("%d.%d",y,f);return 0;}printf("%d No Solution",n);return 0; }第二题 #include<stdi…...

一个车厢号码识别算法(2005年的老程序----ccc)

一个车厢号码识别算法&#xff08;2005年的老程序----ccc&#xff09; 2023-09-18 ccc 程序的识别效果 对图中的车厢号码部分用上下两条线限定分为&#xff0c;然后进行识别。 从上面的识别效果可以看出&#xff0c;识别算法具有一定的鲁棒性&#xff0c;能够适应车厢号码的各…...

「Verilog学习笔记」优先编码器电路①

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 timescale 1ns/1ns//优先编码器电路1 //电路的优先顺序是&#xff0c;从9到1&#xff0c;高级到低级 //9个输入端&#xff1a;I端&#xff0c;4个输出端&#xff1a;Y端&am…...

解决企业项目管理难题:痛点分析与实用解决方案探索

在当前竞争激烈的商业环境中&#xff0c;产品力已然成为市场竞争的核心&#xff0c;这背后的驱动力是技术、人才和管理能力的综合体现——研发创新能力。其中&#xff0c;项目管理能力扮演着至关重要的角色&#xff0c;它能最大化地发挥和释放以上三者的优势。因此&#xff0c;…...

Nginx 简介和安装

文章目录 介绍Nginx的优点(1)速度更快、并发更高(2)配置简单&#xff0c;扩展性强(3)高可靠性(4)热部署(5)成本低、BSD许可证 Nginx的功能特性及常用功能基本HTTP服务高级HTTP服务邮件服务Nginx常用的功能模块 Nginx环境准备docker安装乌班图安装Nginx目录结构分析方式一:Nginx…...

idea生成代码(一):实现java语言的增删改查功能(基于EasyCode插件)支持自定义模板【非常简单】

idea生成代码&#xff08;一&#xff09;&#xff1a;实现java语言的增删改查功能&#xff08;基于EasyCode插件&#xff09;支持自定义模板【非常简单】 idea生成代码&#xff08;二&#xff09;&#xff1a;实现java语言的增删改查功能&#xff08;基于mybatis-plus代码生成器…...

vue预览各种格式图片png jpg tif tiff dcm

// 没有图片展示暂无 有图片&#xff0c;判断格式 png jpg 直接展示 tif tiff需要转化成png展示 dcm需要用到插件 <el-col :span"16"><div style"width:100%;text-align: center;margin-bottom: 10px;">图件预览</div><div style&quo…...

出入库管理系统vue2前端开发服务器地址配置

【精选】vue.config.js 的完整配置&#xff08;超详细&#xff09;_vue.config.js配置_web学生网页设计的博客-CSDN博客 本项目需要修改两处&#xff1a; 1、vue开发服务器地址&#xff1a;config\index.js use strict // Template version: 1.3.1 // see http://vuejs-templa…...

民安智库(第三方满意度调研公司):助力奢侈品品牌提升客户满意度

在奢侈品行业中&#xff0c;客户满意度是衡量品牌价值和市场竞争力的关键因素。为了准确了解客户的需求和反馈&#xff0c;民安智库&#xff08;北京第三方社会调查评估&#xff09;以其专业的满意度调查方法&#xff0c;受委托对某奢侈品品牌进行全面的客户满意度调查。 此次…...

蓝牙特征值示例1-迈金L308自行车尾灯夜骑智能表情尾灯的

了解商品级蓝牙特征值 1 服务器&#xff08;设备&#xff09;描述 0x02-01-06 05-03-0F180A18 09-FF-FFFF166B001C0101 0A-09-4C3330385F37393937 01设备标识 03服务UUID FF厂商自定义数据(厂家编号&#xff1a;FFFF-166B001C0101) 完整设备名称&#xff1a; L308-7997 2 服…...

Three 笔记

一&#xff1a;常用函数封装 1、实例化three 场景、相机、渲染器 import * as THREE from three;/*** 实例化three 场景、相机、渲染器* param container: dom容器 * param fov: 视野角度 * param near: 相机视锥体近裁截面相对相机的距离 * param far: 相机视锥体远裁截面相…...

Crypto | Affine password 第二届“奇安信”杯网络安全技能竞赛

题目描述&#xff1a; 明文经过仿射函数y3x9加密之后变为JYYHWVPIDCOZ&#xff0c;请对其进行解密&#xff0c;flag的格式为flag{明文的大写形式}。 密文&#xff1a; JYYHWVPIDCOZ解题思路&#xff1a; 1、使用在线网站直接破解或手工计算破解&#xff0c;获得flag。&#xf…...

android使用notification消息通知(工具类封装)

代码直接复制粘贴就可以用了&#xff0c;参数可以更具自己需求添加 private NotificationManager manager;private Notification notification;private static final String NORMAL_CHANNEL_ID "my_notification_normal";private static final String IMPORTANT_CHA…...

PicoDiagnostics (NVH设备软件)-PS软件设置文件类型介绍

作为远程技术指导人员&#xff0c;下面这个功能对你来说可能非常有帮助。 在PicoScope 7 软件的文件保存格式里&#xff0c;通常选择的是<PS 数据文件>类型&#xff0c;容易忽略其他实用的保存文件类型&#xff0c;下面我们介绍<PS设置文件>类型。 PS 数据文件&…...

Linux 定时删除7天前的文件

一、编写脚本 #!/bin/bash find /home/kafka/logs -mtime 10 -name "*.*" -exec rm -rf {} \;保存到home目录下的logs_delete.sh 二、解释 # 命令格式 find 对应目录 -mtime 天数 -name "文件名" -exec rm -rf {} \; # 示例命令&#xff0c;将/home/kaf…...

VISA机制

需要用到VISA的3种机制&#xff1a;属性机制、锁定机制和事件机制。以写资源为例&#xff0c;3种机制的作用如图 &#xff08;1&#xff09;属性机制 属性机制用来控制资源的各种属性&#xff0c;这些属性分为两种&#xff1a;只读属性和可读可写属性。 &#xff08;2&#xf…...

基于开源项目OCR做一个探究(chineseocr_lite)

背景&#xff1a;基于图片识别的技术有很多&#xff0c;应用与各行各业&#xff0c;我们公司围绕电子身份证识别自动录入需求开展&#xff0c;以下是我的研究心得 技术栈&#xff1a;python3.6&#xff0c;chineseocr_lite的onnx推理 环境部署&#xff1a;直接上截图&#xff…...

从MySQL到Doris:手把手教你无缝迁移数据模型(附分区分桶实战配置)

从MySQL到Doris&#xff1a;数据模型迁移实战与分区分桶深度优化 如果你正在使用MySQL处理海量数据分析任务&#xff0c;可能会遇到查询性能瓶颈、复杂聚合计算效率低下等问题。Apache Doris作为新一代MPP分析型数据库&#xff0c;兼容MySQL协议却提供了完全不同的底层架构设计…...

济南精神心理专科:如何识别躯体化障碍的早期信号

济南躯体化障碍疾病就医选择难题在济南&#xff0c;面对躯体化障碍疾病的朋友最关心的是隐私和靠谱。选择一家好的医院至关重要&#xff0c;尤其是看躯体化障碍一定要选专科专业医院。这类医院不仅在专业诊疗上更有优势&#xff0c;还能提供更好的隐私保护和服务体验。本文将基…...

就dddcddddd

dianjiaodud1u...

如何写 Skill

核心概念 Skill 是一个自包含的模块&#xff0c;用来给 Claude/Cascade 注入特定领域的知识、工作流和工具。本质上就是一个"新手入职指南"&#xff0c;让通用 AI 变成某个领域的专家。 目录结构 skill-name/ ├── SKILL.md # 必须&#xff0c;核心文件 └…...

嵌入式开发中数据结构的优化与应用实践

1. 数据结构在嵌入式开发中的核心价值作为一名在嵌入式领域摸爬滚打十年的老兵&#xff0c;我深刻体会到数据结构就像瑞士军刀里的各种工具——选对工具能让工作事半功倍。在资源受限的MCU环境中&#xff0c;一个精心选择的数据结构可能意味着程序能否流畅运行和内存是否会爆掉…...

3步快速上手!终极缠论量化工具:基于TradingView本地SDK的几何交易可视化完整指南

3步快速上手&#xff01;终极缠论量化工具&#xff1a;基于TradingView本地SDK的几何交易可视化完整指南 【免费下载链接】chanvis 基于TradingView本地SDK的可视化前后端代码&#xff0c;适用于缠论量化研究&#xff0c;和其他的基于几何交易的量化研究。 缠论量化 摩尔缠论 缠…...

魔兽争霸3终极优化指南:如何解锁180fps帧率限制并解决现代硬件兼容性问题

魔兽争霸3终极优化指南&#xff1a;如何解锁180fps帧率限制并解决现代硬件兼容性问题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 魔兽争霸3作为经…...

MIKE URBAN中如何添加污水管水质

管网中的水质一直是管网模型中的一个难题&#xff0c;很多群友也要求小编更新水质方面的内容&#xff0c;一方面&#xff0c;其实水质相关的内容官方资料已经很多了&#xff0c; 觉得没必要重复更新。另一方面&#xff0c;管道水质率定实在太难以率定&#xff0c;很难算的准确。…...

5步搞定Qwen3-Embedding-4B向量服务:SGlang部署亲测有效

5步搞定Qwen3-Embedding-4B向量服务&#xff1a;SGlang部署亲测有效 1. Qwen3-Embedding-4B模型简介 1.1 模型核心能力 Qwen3-Embedding-4B是通义实验室推出的新一代文本嵌入模型&#xff0c;专为高效语义编码设计。作为Qwen3系列的一员&#xff0c;它在保持中等参数规模&am…...

Odoo 19成本核算避坑指南:标准成本法下差异分析、委外加工汇率风险与WIP分录丢失问题

Odoo 19成本核算实战避坑指南&#xff1a;标准成本差异、委外加工与WIP分录的深度解决方案 在制造业数字化转型浪潮中&#xff0c;Odoo 19作为开源ERP的领军者&#xff0c;其制造与会计模块的深度集成能力备受企业青睐。然而&#xff0c;当我们真正将系统投入生产环境时&#x…...