深入理解 JavaScript 中的 const 关键字

📅 2026/8/6 11:29:05
深入理解 JavaScript 中的 const 关键字
1. const 关键字简介const是 JavaScript 中用于声明常量的关键字于 ES6ECMAScript 2015中引入。它用于声明一个只读的常量一旦声明其值就不能被重新赋值。2. const 的基本特性2.1 声明时必须初始化使用const声明变量时必须在声明的同时进行初始化赋值否则会抛出语法错误。// 正确用法 const PI 3.14159; // 错误用法未初始化 const MAX_SIZE; // SyntaxError: Missing initializer in const declaration2.2 不可重新赋值const声明的常量不能被重新赋值。尝试重新赋值会导致 TypeError。const APP_NAME MyApp; APP_NAME NewApp; // TypeError: Assignment to constant variable2.3 块级作用域与let类似const声明的常量具有块级作用域只在声明它的代码块内有效。{ const LOCAL_CONST 只在块内有效; console.log(LOCAL_CONST); // 输出只在块内有效 } console.log(LOCAL_CONST); // ReferenceError: LOCAL_CONST is not defined3. 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.com4. 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 Im const; var globalVar Im var; console.log(window.GLOBAL_CONST); // undefined console.log(window.globalVar); // Im var7. 总结const是 JavaScript 中声明常量的标准方式它提供了块级作用域、不可重新赋值等特性。虽然对于引用类型只能保证引用不变但结合良好的编程习惯和必要的工具如Object.freeze()可以有效地提高代码的稳定性和可维护性。在现代 JavaScript 开发中建议遵循 默认使用 const需要重新赋值时使用 let避免使用 var 的原则。