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

深入理解 JavaScript 中的 const 关键字

1. const 关键字简介

const是 JavaScript 中用于声明常量的关键字,于 ES6(ECMAScript 2015)中引入。它用于声明一个只读的常量,一旦声明,其值就不能被重新赋值。

2. const 的基本特性

2.1 声明时必须初始化

使用const声明变量时,必须在声明的同时进行初始化(赋值),否则会抛出语法错误。

// 正确用法 const PI = 3.14159; // 错误用法:未初始化 const MAX_SIZE; // SyntaxError: Missing initializer in const declaration

2.2 不可重新赋值

const声明的常量不能被重新赋值。尝试重新赋值会导致 TypeError。

const APP_NAME = "MyApp"; APP_NAME = "NewApp"; // TypeError: Assignment to constant variable

2.3 块级作用域

let类似,const声明的常量具有块级作用域,只在声明它的代码块内有效。

{ const LOCAL_CONST = "只在块内有效"; console.log(LOCAL_CONST); // 输出:"只在块内有效" } console.log(LOCAL_CONST); // ReferenceError: LOCAL_CONST is not defined

3. const 与对象/数组

3.1 常量指向的引用不可变

const保证的是变量名指向的内存地址不变,而不是该地址存储的数据不变。对于对象和数组这样的引用类型,可以修改其属性或元素。

// 对象示例 const person = { name: "Alice", age: 25 }; person.age = 26; // 允许:修改对象属性 person.city = "Beijing"; // 允许:添加新属性 console.log(person); // { name: "Alice", age: 26, city: "Beijing" } // 数组示例 const colors = ["red", "green"]; colors.push("blue"); // 允许:添加元素 colors[0] = "yellow"; // 允许:修改元素 console.log(colors); // ["yellow", "green", "blue"]

3.2 如何创建真正的不可变对象

如果需要创建完全不可变的对象,可以使用Object.freeze()方法。

const config = Object.freeze({ apiUrl: "https://api.example.com", timeout: 5000 }); config.apiUrl = "https://new.api.com"; // 静默失败(严格模式下会报错) console.log(config.apiUrl); // 仍然是 "https://api.example.com"

4. const 与 let、var 的对比

特性constletvar
作用域块级作用域块级作用域函数作用域/全局作用域
变量提升存在暂时性死区存在暂时性死区变量提升,初始值为 undefined
重复声明不允许不允许允许
重新赋值不允许允许允许
声明时初始化必须可选可选

5. 最佳实践与使用场景

5.1 优先使用 const

在 ES6+ 开发中,建议优先使用const,只有在明确知道变量需要重新赋值时才使用let。这有助于提高代码的可读性和可维护性。

5.2 典型使用场景

  • 配置常量:API 地址、超时时间、错误码等
  • 数学常量:PI、E 等
  • 导入模块:ES6 模块导入默认使用 const
  • 循环中的不变值:for...of 循环中的迭代变量
// 配置常量 const API_BASE_URL = "https://api.example.com"; const MAX_RETRY_COUNT = 3; // 数学常量 const PI = Math.PI; const E = Math.E; // 模块导入 import { useState, useEffect } from 'react'; // for...of 循环 const fruits = ["apple", "banana", "orange"]; for (const fruit of fruits) { console.log(fruit); }

6. 常见误区与注意事项

6.1 const 不保证对象内容不变

如前所述,const只保证引用不变,不保证对象内容不变。如果需要深度不可变,可以考虑使用 Immutable.js 等库。

6.2 暂时性死区

const声明的常量也存在暂时性死区,在声明之前访问会报错。

console.log(MY_CONST); // ReferenceError: Cannot access 'MY_CONST' before initialization const MY_CONST = "value";

6.3 全局对象的属性

在全局作用域中使用const声明的常量不会成为全局对象(浏览器中的 window)的属性,而var会。

const GLOBAL_CONST = "I'm const"; var globalVar = "I'm var"; console.log(window.GLOBAL_CONST); // undefined console.log(window.globalVar); // "I'm var"

7. 总结

const是 JavaScript 中声明常量的标准方式,它提供了块级作用域、不可重新赋值等特性。虽然对于引用类型只能保证引用不变,但结合良好的编程习惯和必要的工具(如Object.freeze()),可以有效地提高代码的稳定性和可维护性。在现代 JavaScript 开发中,建议遵循 "默认使用 const,需要重新赋值时使用 let,避免使用 var" 的原则。

http://www.jsqmd.com/news/1339350/

相关文章:

  • C++(类与对象)(上)
  • 3篇1章10节:小说构思和选题的几个核心方法
  • 重庆乳胶漆和艺术漆怎么选?别只看价格,先看墙面主动调湿、长效除醛和质保体系 - 中国华商产业观察网
  • 2026年北京婚姻纠纷律师实用指南:10家北京婚姻律所汇总+离婚律师选择要点与避坑指南 - U渠道
  • 全面掌握Wand-Enhancer:WeMod高级功能本地化增强工具深度解析
  • 2026安徽考二建没有中专学历?电大中专是合规的前置报考前提 - 小张zc
  • Adobe GenP 3.0:三步激活Adobe创意软件的终极指南
  • 5分钟掌握MAA:明日方舟全自动化助手终极指南
  • SQL Delete操作全解析:从基础语法到生产实践
  • GTA5线上小助手:免费开源的终极游戏增强工具完整使用指南
  • 意大利自驾|驾照公证+海牙认证,欧洲自驾办理公证踩坑汇总! - 实用干货补给站
  • 福来妊娠油成分安全吗?一个做过五年美妆成分测评的孕期妈妈来说说 - 甄选测评馆
  • Spark公平调度器配置实战:多作业资源隔离与优先级管理
  • 从零实现神经网络训练:手动推导梯度下降与反向传播
  • 2026 武汉水箱保洁、水箱清洗,大型管网吸污,工厂园区运维经验分享 - LYL仔仔
  • VS Code C++版本配置指南:解决智能感知错误与提升开发效率
  • 火灾自动报警安装实力之选 2026行业前五品牌深度测评 - 工业品网
  • 基于 Python 搭建全市场股票涨停板炸板率监控与风控提示
  • 3分钟快速上手echarts-liquidfill:打造惊艳的动态液位图表
  • 【落地实操】央国企穿透式监管数智化建设:5 步搭建全链路监管数据体系
  • 3个真实场景告诉你:为什么你需要这个DeepL浏览器翻译插件
  • 基于AI的Seed Evolving工作流:从单篇文章到多模态知识卡片的自动化生成
  • Agent Substrate:云原生 AI Agent Runtime底座
  • 赛格购物卡回收哪里靠谱?实测多家平台的到账效率,选值得信赖的那家 - 猎卡回收公众号
  • 2026北京房产继承法律服务8家律所盘点:遗产继承律师推荐与实操避坑攻略 - 商业大观
  • 2026年8月二手叉车采购怎么选?车况透明、售后完善高性价比二手叉车认准轩溪尚机械,深耕行业 14 年老店 - 专业优选推荐榜
  • CSS字体与文本样式实战指南:从基础排版到高级特效
  • 智慧工厂AR运维方案怎么选才靠谱
  • 免费开源医学影像软件Horos:macOS上专业的DICOM查看与3D处理工具
  • 洛阳断桥铝门窗厂家选择指南:工厂直销、材料透明、售后链路短的才值得信任 - 中国品牌企业观察网