当前位置: 首页 > 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.dtcms.com/a/326197.html

相关文章:

  • QML的中英文翻译
  • 快速搭建前端playwright工程
  • SpringAI实现Reread(Advisor)
  • DNS核心概念与BIND配置详解
  • C++11的历史和统一的初始化列表
  • Qt串口通信设计指南:通信层架构与实践
  • K8S学习----应用部署架构:传统、虚拟化与容器的演进与对比
  • 虚拟财产刑事辩护:跨地域性与匿名性带来的挑战
  • 记录一些sonic自动化运行中的问题
  • 常见通信协议详解:TCP、UDP、HTTP/HTTPS、WebSocket 与 GRPC
  • 基于 Axios 的 HTTP 请求封装文件解析
  • Rust:专业级错误处理工具 thiserror 详解
  • Nginx 从入门到实战:安装、配置、升级与高级应用全解析
  • Web 开发前端与后端 API 的交互
  • golang 基础案例_01
  • 【MYSQL】MySQL中On duplicate key update
  • 台式机内存条安装方法
  • Docker中安装MySQL 5的详细过程
  • 算法讲解--水果成篮
  • GitHub的简单使用方法----(2)
  • Android中Activity销毁底层原理
  • AVS Video Converter视频转换与编辑工具深度评测
  • 基于OpenCV的实时美颜技术:从传统算法到深度学习融合实现
  • 光功率dBm为何是负数?一文详解
  • Effective C++ 条款35:考虑 virtual函数以外的其他选择
  • Spring源码解析 - SpringApplication run流程-prepareContext源码分析
  • MD5:理解MD5 / MD5核心特性 / MD5 在前端开发中的常见用途 / 在线生成MD5 / js-md5
  • Linux Docker 运行SQL Server
  • loading效果实现原理
  • Elasticsearch Node.js 客户端的安装