news 2026/8/5 2:09:35

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/8/4 14:10:11

洛谷 P1892 [BalticOI 2003] 团伙

题目描述现在有 n 个人&#xff0c;他们之间有两种关系&#xff1a;朋友和敌人。我们知道&#xff1a;一个人的朋友的朋友是朋友一个人的敌人的敌人是朋友现在要对这些人进行组团。两个人在一个团体内当且仅当这两个人是朋友。请求出这些人中最多可能有的团体数。输入格式第一行…

作者头像 李华
网站建设 2026/8/4 10:32:49

洛谷 P2024 [NOI2001] 食物链

题目描述动物王国中有三类动物 A,B,C&#xff0c;这三类动物的食物链构成了有趣的环形。A 吃 B&#xff0c;B 吃 C&#xff0c;C 吃 A。现有 N 个动物&#xff0c;以 1∼N 编号。每个动物都是 A,B,C 中的一种&#xff0c;但是我们并不知道它到底是哪一种。有人用两种说法对这 N…

作者头像 李华
网站建设 2026/8/5 5:22:57

Animeko跨平台动漫追番神器:从入门到精通的完整指南

在数字娱乐时代&#xff0c;动漫爱好者面临着内容分散、平台繁杂的困扰。Animeko应运而生&#xff0c;这款基于Kotlin Multiplatform技术构建的跨平台应用&#xff0c;彻底改变了传统追番模式。无论你是使用手机、平板还是电脑&#xff0c;都能享受到一致的流畅体验。 【免费下…

作者头像 李华
网站建设 2026/8/5 5:09:16

中级软件设计师英语部分备考攻略:完形填空高频考点与解题技巧

中级软件设计师考试的英语部分以完形填空为核心题型&#xff0c;聚焦 IT 领域核心概念与专业术语&#xff0c;主要考查考生对技术语境的理解、专业词汇的积累以及逻辑推理能力。题目多围绕软件架构、云计算、数据库、安全防护等高频考点展开&#xff0c;难度适中但对专业语境适…

作者头像 李华
网站建设 2026/8/4 23:20:48

2025年下半年软件设计师易混淆知识点

该文档聚焦软件设计师考试6 大核心模块的易混淆知识点&#xff0c;涵盖计算机组成与体系结构、操作系统、程序设计语言基础、数据结构、算法基础、系统开发基础&#xff0c;通过定义区分、表格对比、实例说明的方式&#xff0c;清晰梳理了原反补码运算、寻址方式、存储管理、编…

作者头像 李华
网站建设 2026/8/5 6:59:36

Headscale配置终极指南:从零到精通的环境变量管理技巧

Headscale配置终极指南&#xff1a;从零到精通的环境变量管理技巧 【免费下载链接】headscale An open source, self-hosted implementation of the Tailscale control server 项目地址: https://gitcode.com/GitHub_Trending/he/headscale 还在为Headscale的复杂配置头…

作者头像 李华