news 2026/7/14 11:21:30

JavaScript 变量声明最佳实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JavaScript 变量声明最佳实践

使用const 作为变量赋值,这是一个非常好的习惯!在现代前端开发(尤其是 Vue/React 项目)中,“默认使用const,只有必须修改时才用let是公认的最佳实践。

不仅没有问题,反而是在遵循行业标准。

不过,作为一个开发者,我们需要深入理解const到底锁住了什么,否则在处理**对象(Object)数组(Array)**时可能会产生误解。

以下是关于const你必须知道的几个核心点:

1. 最大的误区:const并不代表“值不能变”

很多初学者认为const定义的东西就是“常量”,永远不能改。这是不准确的。

  • 对于基础类型(String, Number, Boolean):是的,你不能修改它的值。
  • 对于引用类型(Object, Array):const锁住的只是内存地址(引用),而不是里面的内容。

代码演示:

// ✅ 基础类型:彻底锁死constscore=100;score=101;// ❌ 报错:Assignment to constant variable.// ⚠️ 引用类型:锁地址,不锁内容constuser={name:"Ming",age:18};// ✅ 这样是允许的!(修改内容)user.age=19;console.log(user.age);// 19// ✅ 这样也是允许的!(新增属性)user.gender="male";// ❌ 这样是禁止的!(修改地址/重新赋值)user={name:"Jack"};// 报错

比喻:
const就像是你给了变量一个房子的地址

  • 你不能把这个变量指向另一个房子(重新赋值)。
  • 但是你可以随意装修这个房子里的家具(修改属性)。

2. Vue 3 中的const

在你之前的 Vue 代码中,你可能会疑惑:为什么响应式数据要用const

// Vue 3 常见写法constcount=ref(0);conststate=reactive({list:[]});
  • 为什么refconst

  • 因为ref返回的是一个对象(RefImpl)。

  • 我们修改的是count.value = 1(修改房子里的家具)。

  • 我们永远不会写count = ref(1)(换房子),这样会丢失响应性。

  • 为什么reactiveconst

  • 同理,reactive返回的是一个 Proxy 对象。我们只修改里面的属性,不修改对象本身。

结论:在 Vue 3 中,95% 的响应式变量定义都应该用const


3. 什么时候const会出问题?(必须用let的场景)

只有当你明确需要**“重新赋值”**(Reassign)的时候,const才会报错,这时你需要换成let

场景 A:基本类型的累加/切换
// ❌ 错误constisShow=false;isShow=true;// 报错// ✅ 正确letisShow=false;isShow=true;
场景 B:for 循环的索引
// ❌ 错误for(consti=0;i<5;i++){// i++ 试图修改 i,导致报错}// ✅ 正确for(leti=0;i<5;i++){...}// ✅ 特例:for...of 是可以的// 因为每次循环都会创建一个新的 const 作用域,而不是修改同一个变量for(constitemoflist){...}

4. 总结:黄金法则

  1. **首选const**:默认所有变量都用const。这能告诉阅读代码的人:“这个变量的引用不会变”,代码可读性更强,也更安全。
  2. **次选let**:如果你写代码时发现报错说Assignment to constant variable,或者你明确知道这个变量稍后会被x = y这样重新赋值,再把它改成let
  3. **永不用var**:把它扫进历史的垃圾堆。var有变量提升(Hoisting)和作用域泄露的问题,是 bug 之源。

一句话:只要记住const对象是可以改属性的就行。

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

激光熔覆技术:COMSOL仿真研究与实践,多层多道工艺视频与模型解析

comsol激光熔覆 多层多道 包括视频和模型激光熔覆这玩意儿&#xff0c;工业圈子里搞金属3D打印和表面修复的肯定不陌生。但真要把多层多道熔覆过程在COMSOL里玩明白&#xff0c;光靠点鼠标可不够。今儿咱们直接上干货&#xff0c;聊聊怎么用代码操控激光路径&#xff0c;顺便把…

作者头像 李华
网站建设 2026/7/14 4:57:56

5分钟搞定JeecgBoot分库分表:ShardingSphere完整实战手册

5分钟搞定JeecgBoot分库分表&#xff1a;ShardingSphere完整实战手册 【免费下载链接】jeecg-boot jeecgboot/jeecg-boot 是一个基于 Spring Boot 的 Java 框架&#xff0c;用于快速开发企业级应用。适合在 Java 应用开发中使用&#xff0c;提高开发效率和代码质量。特点是提供…

作者头像 李华
网站建设 2026/7/14 8:28:01

天锐绿盾新版注册机【仅用于个人学习,禁止其他用途】

天锐绿盾新版注册机&#xff0c;支持注册V7.51版本&#xff0c;完美激活&#xff0c;永久使用。三大模块正常使用&#xff0c;注册机不绑定设备&#xff0c;欢迎咨询了解**注册机仅用于个人学习研究使用&#xff0c;禁止其他用途&#xff0c;法律风险请自行负责。**

作者头像 李华
网站建设 2026/7/14 8:28:00

不止于兼容:金仓数据库的三重革新与超越

兼容 是对企业历史投资的尊重 是确保业务平稳过渡的基石 然而 这仅仅是故事的起点 在数字化转型的深水区&#xff0c;企业对数据库的需求早已超越“语法兼容”的基础诉求。无论是核心业务系统的稳定运行&#xff0c;还是敏感数据的安全防护&#xff0c;亦或是复杂场景下的性能优…

作者头像 李华
网站建设 2026/7/11 5:35:09

从校园到数据中心:智能照明系统的跨场景集成与能效优化

一、系统简介1. 智能照明功能介绍手动控制&#xff1a;允许用户和管理人员在现场或远程简单、方便地实现照明灯具的开关与调光操作调光控制&#xff1a;通过调节灯具亮度与色温来获取舒适的照明环境&#xff0c;同时降低照明能耗避免能源浪费定时控制&#xff1a;依据设定好的时…

作者头像 李华