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

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.lryc.cn/news/618036.html

相关文章:

  • 爬虫与数据分析实战
  • 爬虫和数据分析相结合案例
  • 介绍一下jQuery的AJAX异步请求
  • android 换肤框架详解2-LayoutInflater源码解析
  • 【Linux文件操作】文件操作系统调用
  • 机器学习之DBSCAN
  • Linux中DNS系统搭建与配置指南(配实验步骤与注释)
  • GO学习记录三
  • 【网络运维】Linux:常见 Web 服务器
  • 对自己的 app 进行分析, 诊断,审视
  • FPGA+护理:跨学科发展的探索(二)
  • Python day 41
  • AVS Video Converter视频转换与编辑工具深度评测
  • 什么是电网谐波?
  • PyCharm(2025.1.3.1)绑定 Conda 环境
  • 一篇文章解决Unity没有添加模块选项的问题
  • Android.mk教程
  • 深入解析Windows系统下UDP绑定失败的原理与系统级解决方案
  • Java AI生成长篇小说的实用
  • 算法基础 1
  • 为什么TEXT不区分大小写,而BLOB严格区分?
  • redis笔记(二)
  • OpenBMC中phosphor-dbus-interfaces深度解析:架构、原理与应用实践
  • 02Vue3
  • 贪心----3. 跳跃游戏 II
  • 使用MAS(Microsoft Activation Scripts)永久获得win10专业版和office全套
  • 进程线程切换的区别
  • 【MATLAB 2025a】安装离线帮助文档
  • 第16届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2025年3月9日真题
  • 【k近邻】Kd树的构造与最近邻搜索算法