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

JavaScript Const的基础使用

JavaScript 中的 const 关键字

const 是 JavaScript 中用于声明常量的关键字,其核心特性是:

  1. 不可重新赋值
    声明后变量的引用不可更改:

    const PI = 3.14;
    PI = 3.14159; // 报错:Assignment to constant variable
    

  2. 块级作用域
    let 类似,仅在当前代码块内有效:

    {const message = "Hello";console.log(message); // 输出 "Hello"
    }
    console.log(message); // 报错:message is not defined
    

  3. 必须初始化
    声明时必须赋值,否则报错:

    const name; // 报错:Missing initializer in const declaration
    


关键注意事项

  • 对象和数组的可变性
    const 仅阻止变量被重新赋值,但对象或数组的内容可修改:

    const user = { name: "Alice" };
    user.name = "Bob"; // 允许修改属性
    user = { name: "Charlie" }; // 报错:重新赋值被禁止const nums = [1, 2, 3];
    nums.push(4); // 允许修改数组
    

  • varlet 的区别

    特性constletvar
    重新赋值❌ 禁止✅ 允许✅ 允许
    作用域块级作用域块级作用域函数作用域
    变量提升不提升不提升✅ 提升(初始化为 undefined
    重复声明❌ 禁止❌ 禁止✅ 允许(覆盖)

最佳实践

  1. 默认使用 const
    优先用 const 声明变量,仅在需要重新赋值时改用 let,避免使用 var
  2. 命名规范
    常量通常使用全大写 + 下划线命名(如 MAX_SIZE),提高可读性。
  3. 冻结对象
    若需完全不可变对象,可使用 Object.freeze()
    const config = Object.freeze({ key: "secret" });
    config.key = "new"; // 静默失败(严格模式下报错)
    

通过合理使用 const,可提升代码稳定性和可维护性,减少意外赋值导致的错误。

在 JavaScript 中,const 是用于声明常量的关键字,具有以下特点和行为:

声明与初始化

const 声明的变量必须在声明时立即初始化,且不能重新赋值。例如:

const PI = 3.14159; // 正确
const MAX_SIZE;     // 错误:未初始化

块级作用域

constlet 类似,具有块级作用域(仅限于 {} 内):

if (true) {const x = 10;console.log(x); // 输出 10
}
console.log(x);   // 报错:x 未定义

对象和数组的可变性

对于引用类型(如对象或数组),const 仅保证变量引用的地址不变,但内容可以修改:

const person = { name: "Alice" };
person.name = "Bob"; // 允许修改属性
person = {};         // 报错:重新赋值const nums = [1, 2, 3];
nums.push(4);        // 允许修改数组
nums = [5, 6];       // 报错:重新赋值

暂时性死区

let 类似,const 存在暂时性死区(TDZ),声明前访问会报错:

console.log(x); // 报错:Cannot access 'x' before initialization
const x = 10;

命名规范

通常使用全大写字母和下划线命名常量(如 MAX_SIZE),但非强制要求。

使用场景

  • 需要保护变量不被重新赋值时(如配置项、数学常量)。
  • 引用类型需要保持引用稳定但内容可变时。

 

http://www.xdnf.cn/news/17557.html

相关文章:

  • UE 手柄点击UI 事件
  • 《零基础入门AI:深度学习基础核心概念解析(从激活函数到反向传播)》
  • MySQL 基础练习(50 题完整解析)
  • 【CV 目标检测】①——目标检测概述
  • VSCode编辑器常用24款基础插件
  • STM32 HAL库 HAL_TIM_OC_Start函数解读
  • 梯度裁剪总结
  • MCU的设计原理
  • AcWing 6479. 点格棋
  • MySQL 基础操作教程
  • PyTorch基础(使用Numpy实现机器学习)
  • 2025-8-11-C++ 学习 暴力枚举(2)
  • 面试题-----微服务业务
  • wed前端第三次作业
  • 本地文件夹与 GitHub 远程仓库绑定并进行日常操作的完整命令流程
  • Java 大视界 -- Java 大数据在智能安防视频监控系统中的多目标跟踪与行为分析优化(393)
  • Windows Server 2022域控制器部署与DNS集成方案
  • 机器学习中数据集的划分难点及实现
  • LangGraph 历史追溯 人机协同(Human-in-the-loop,HITL)
  • 通用 maven 私服 settings.xml 多源配置文件(多个仓库优先级配置)
  • OpenCV计算机视觉实战(19)——特征描述符详解
  • Python自动化测试实战:reCAPTCHA V3绕过技术深度解析
  • 关于JavaScript 性能优化的实战指南
  • 4-下一代防火墙组网方案
  • 需求列表如何做层级结构
  • Redis类型之Hash
  • vscode的wsl环境,怎么打开linux盘的工程?
  • 【Oracle】如何使用DBCA工具删除数据库?
  • 九,算法-递归
  • ​电风扇离线语音芯片方案设计与应用场景:基于 8 脚 MCU 与 WTK6900P 的创新融合