在JavaScript中,const
关键字用于声明常量,即那些一旦赋值后就不应更改的变量。它在许多方面与let
关键字类似,但增加了一个重要的约束条件——必须在声明时初始化,并且之后尝试修改其值会导致错误。下面将深入探讨const
的特性及其使用场景。
初始化与不可变性
- 初始化要求:与
let
不同,使用const
声明变量时,必须立即为其赋予初始值。不提供初始值会导致语法错误。
const pi; // 错误:缺少初始值
- 不可变性:一旦用
const
声明并初始化了一个变量,尝试重新赋值会抛出错误。
const age = 19; age = 36; // 错误:TypeError,不能为常量重新赋值
重复声明与块级作用域
const
同样遵循块级作用域的规则,并且禁止在同一作用域内重复声明同名变量。
const name = 'Minos'; const name = 'Nic'; // 错误:SyntaxError,重复声明
同时,const
的声明范围也限制在声明它的块内。
const name = 'Minos'; if (true) { const name = 'Nic'; // 这里的name是新的、局部的 } console.log(name); // 输出 'Minos'
对象与数组的“不变性”
需要注意的是,虽然const
确保变量引用本身不会改变,但它并不能保证所引用的数据结构(如对象或数组)内部的不变性。
const person = {}; person.name = 'Minos'; // 这是允许的,因为只修改了对象的属性,而非person变量的引用
const
与循环
const
不能用于声明需要在循环中修改的迭代变量,因为这违背了其不可变性的原则。
for (const i = 0; i < 10; ++i) {} // 错误:给常量赋值
然而,可以在循环中使用const
来声明那些不会被改变的变量,这对于for-of
和for-in
循环尤为有用,其中迭代变量通常不需要修改。
for (const value of [1, 2, 3, 4, 5]) { console.log(value); } // 输出 1, 2, 3, 4, 5
综上所述,const
关键字为JavaScript提供了定义不可变变量的能力,增强了代码的可读性和维护性,尤其是在处理配置项、函数默认参数等场景下。理解const
的特性和限制,能帮助开发者写出更加健壮、易于理解的代码。