新闻详情

新闻详情

首页 / 资讯中心 / 详情

JavaScript的变量和数据类型介绍

发布时间:2026/10/26 15:20:40来源:尧图网络
JavaScript的变量和数据类型介绍
文章目录一、 变量声明从 var 到 let 与 const 的进化核心要点解析1、块级作用域2、暂时性死区TDZ3、const 的“不变”误区二、 数据类型两大阵营原始类型 vs 引用类型1. 原始类型栈内存存储按值访问2. 引用类型堆内存存储按引用访问三、 类型检测三把“照妖镜”四、 类型转换显式与隐式双刃剑显式转换手动控制推荐隐式转换自动发生容易踩坑五、 知识图谱速查表面试/实战高频 给你的“避坑”与进阶建议一、 变量声明从 var 到 let 与 const 的进化声明变量是第一步。JS主要提供了三种关键字它们在作用域和提升Hoisting 行为上有本质区别。核心要点解析1、块级作用域let 和 const 的出现解决了 var 污染全局和循环变量泄露的问题。if(true){var a1;letb2;}console.log(a);// 输出1var 逃逸出了块级 console.log(b);// 报错b is not definedlet 被锁在块内2、暂时性死区TDZ虽然 let 和 const 也会提升但在声明之前访问它们会报 ReferenceError这个声明到赋值之间的区域就是 TDZ。这强制你必须先声明后使用代码更健壮。3、const 的“不变”误区const 保证的是变量指向的内存地址不变。如果指向的是对象对象的属性值是可以修改的。const obj{name:JS};obj.nameJavaScript;// ✅ 允许因为 obj 的引用没变 // obj{};// ❌ 报错试图更改引用二、 数据类型两大阵营原始类型 vs 引用类型JS 的数据类型分为原始类型Primitive 和引用类型Object。它们的存储方式和赋值机制完全不同。1. 原始类型栈内存存储按值访问目前有 7 种原始类型。它们保存在栈内存中赋值时是“复制一份值”。number双精度 64 位浮点数。包含整数和小数以及特殊值 Infinity、-Infinity 和 NaNNot a Number。注意NaN 是唯一的 typeof NaN ‘number’ 且 NaN ! NaN 的值需用 Number.isNaN() 判断。bigintES2020用于表示大于 2^53 - 1 或小于 -(2^53 - 1) 的整数。写法const big 9007199254740991n;。stringUTF-16 编码的字符序列。不可变任何字符串操作都会返回一个新字符串。booleantrue 和 false。undefined声明了变量但未赋值时的默认值。null表示“空”或“不存在”的对象指针这也是著名的 typeof null “object” 的历史遗留 Bug。symbolES6保证唯一性的标识符常用于定义对象的私有属性名或常量值。2. 引用类型堆内存存储按引用访问Object对象一切复杂结构的基类。包括普通对象 {}、数组 []、函数 function、日期 Date、正则 RegExp 等。存储机制变量名存储在栈中指向堆内存中实际存储数据的内存地址。赋值时只是复制了这个地址引用新旧变量指向同一个数据。赋值对比关键区别// 原始类型独立副本leta10;letba;b20;console.log(a);//10互不影响 // 引用类型共享引用letobj1{value:10};letobj2obj1;obj2.value20;console.log(obj1.value);//20因为指向同一片内存三、 类型检测三把“照妖镜”由于动态类型我们经常需要确认变量的类型。实战最推荐Array.isArray() 专门检测数组判断空值用 null 或 undefined。四、 类型转换显式与隐式双刃剑JS 的灵活性也体现在“自动类型转换”上即隐式转换。显式转换手动控制推荐转字符串String(123) 或 (123).toString()转数字Number(‘456’)、parseInt(‘123px’)解析、 一元运算符转布尔Boolean(0) 返回 false隐式转换自动发生容易踩坑当使用 、、 或 if 判断时引擎会偷偷帮我们转换类型。console.log(12);//12(数字隐式转为字符串)console.log(6-2);//4(字符串隐式转为数字)console.log(0false);//true(布尔转为数字)console.log(0false);//false(严格相等不转换类型推荐使用)最佳实践除了比较 null 或 undefined 外永远使用 全等 和 !避免隐式转换带来的预料之外的结果。五、 知识图谱速查表面试/实战高频 给你的“避坑”与进阶建议1、拥抱 let 和 const在现代开发中彻底放弃 var这是公认的最佳实践。2、操作不可变性操作引用类型对象/数组时若不想影响原数据请使用展开运算符 … 或 Object.assign() 创建浅拷贝深拷贝需使用 structuredClone() 或 lodash.cloneDeep。3、注意浮点数精度0.1 0.2 ! 0.3涉及金额计算请使用整数分或 BigInt。4、内存泄露引用类型因为“按引用访问”若全局变量持有了大对象的引用且忘记释放会导致内存泄露。记得在不需要时赋值为 null 来解除引用。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/10/25 3:20:41

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/10/25 3:43:49

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/10/26 12:48:02

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/10/26 10:03:11

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/10/25 3:54:32

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/10/25 5:32:24

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉