news 2026/2/28 5:13:48

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/2/27 0:28:51

快速掌握Windows便携版Postman:免安装的API开发神器终极指南

快速掌握Windows便携版Postman&#xff1a;免安装的API开发神器终极指南 【免费下载链接】postman-portable &#x1f680; Postman portable for Windows 项目地址: https://gitcode.com/gh_mirrors/po/postman-portable Postman便携版是一款专为Windows系统设计的免安…

作者头像 李华
网站建设 2026/2/24 7:50:32

三部架构与 Banana2 快速对接:核心方案与实用代码

三部架构与Banana2快速对接&#xff1a;核心方案实用代码 本文聚焦三部架构&#xff08;接入层、计算层、存储层&#xff09;与Banana2模型的高效对接&#xff0c;精简核心技术路径&#xff0c;补充可直接落地的代码片段&#xff0c;兼顾实用性与技术性&#xff0c;助力快速解…

作者头像 李华
网站建设 2026/2/24 4:53:49

【GRPC 和 HTTP】设计目标和底层实现

文章目录一、核心维度对比表二、关键差异拆解1. 序列化&#xff1a;JSON vs Protobuf&#xff08;性能核心差距&#xff09;2. 传输协议&#xff1a;HTTP/1.1 vs HTTP/2&#xff08;并发能力差距&#xff09;3. 通信模式&#xff1a;单向请求 vs 多模式流式4. 接口契约&#xf…

作者头像 李华
网站建设 2026/2/27 12:57:39

littlefs v2到v3版本升级:10大关键技术特性深度解析

littlefs v2到v3版本升级&#xff1a;10大关键技术特性深度解析 【免费下载链接】littlefs A little fail-safe filesystem designed for microcontrollers 项目地址: https://gitcode.com/GitHub_Trending/li/littlefs littlefs是一个专为微控制器设计的轻量级故障安全…

作者头像 李华
网站建设 2026/2/27 19:34:41

macOS iSCSI Initiator终极指南:免费扩展存储空间的完整方案

macOS iSCSI Initiator终极指南&#xff1a;免费扩展存储空间的完整方案 【免费下载链接】iSCSIInitiator iSCSI Initiator for macOS 项目地址: https://gitcode.com/gh_mirrors/is/iSCSIInitiator 还在为MacBook存储空间不足而烦恼吗&#xff1f;macOS iSCSI Initiato…

作者头像 李华