JavaScript const:在 ES6 中声明常量

摘要:在本教程中,您将学习如何使用 JavaScript const 关键字定义常量。

JavaScript const 关键字简介

ES6 提供了一种使用 const 关键字声明常量的新方法。const 关键字创建对值的只读引用。

const CONSTANT_NAME = value;Code language: JavaScript (javascript)

按照惯例,常量标识符使用大写字母。

let 关键字类似,const 关键字声明块级作用域变量。但是,const 关键字声明的块级作用域变量不能被重新赋值

let 关键字声明的变量是可变的。这意味着您可以随时更改它们的值,如下面的示例所示

let a = 10;
a = 20;
a = a + 5;
console.log(a); // 25Code language: JavaScript (javascript)

但是,用 const 关键字创建的变量是“不可变的”。换句话说,您无法将它们重新分配给不同的值。

如果您尝试重新分配一个由 const 关键字声明的变量,您将得到一个类似这样的 TypeError

const RATE = 0.1;
RATE = 0.2; // TypeErrorCode language: JavaScript (javascript)

与 let 关键字不同,您需要在 const 关键字声明的变量中初始化值。

以下示例由于在 const 变量声明中缺少初始化程序而导致 SyntaxError

const RED; // SyntaxErrorCode language: JavaScript (javascript)

JavaScript const 和对象

const 关键字确保它创建的变量是只读的。但是,这并不意味着 const 变量引用的实际值是不可变的。例如

const person = { age: 20 };
person.age = 30; // OK
console.log(person.age); // 30Code language: JavaScript (javascript)

即使 person 变量是一个常量,您也可以更改其属性的值。

但是,您不能将 person 常量重新分配给其他值,如下所示

person = { age: 40 }; // TypeError
Code language: JavaScript (javascript)

如果您想让 person 对象的值不可变,则必须使用 Object.freeze() 方法冻结它

const person = Object.freeze({age: 20});
person.age = 30; // TypeErrorCode language: JavaScript (javascript)

请注意,Object.freeze() 是浅层的,这意味着它可以冻结对象的属性,而不是属性引用的对象。

例如,company 对象是常量且已冻结。

const company = Object.freeze({
    name: 'ABC corp',
    address: {
        street: 'North 1st street',
        city: 'San Jose',
        state: 'CA',
        zipcode: 95134
    }
});Code language: JavaScript (javascript)

company.address 对象不是不可变的,您可以向 company.address 对象添加新属性,如下所示

company.address.country = 'USA'; // OKCode language: JavaScript (javascript)

JavaScript const 和数组

请考虑以下示例

const colors = ['red'];
colors.push('green');
console.log(colors); // ["red", "green"]

colors.pop();
colors.pop();
console.log(colors); // []

colors = []; // TypeErrorCode language: JavaScript (javascript)

在这个例子中,我们使用 const 关键字声明了一个名为 colors 的数组,它只有一个元素。然后,我们可以通过添加 green 颜色来更改数组的元素。但是,我们不能将数组 colors 重新分配给另一个数组。

在 for 循环中使用 JavaScript const

ES6 提供了一个名为 for...of 的新结构,它允许您创建循环遍历可迭代对象,例如 数组映射集合

let scores = [75, 80, 95];

for (let score of scores) {
	console.log(score);
}Code language: JavaScript (javascript)

如果您不想在循环内修改 score 变量,可以使用 const 关键字代替

let scores = [75, 80, 95];
for (const score of scores) {
    console.log(score);
}Code language: JavaScript (javascript)

在这个例子中,for...of 在每次循环迭代中为 const 关键字创建新的绑定。换句话说,在每次迭代中都会创建一个新的 score 常量。

请注意,const 在命令式 for 循环中不起作用。尝试使用 const 关键字在命令式 for 循环中声明变量会导致 TypeError

for (const i = 0; i < scores.length; i++) { // TypeError
    console.log(scores[i]);
}Code language: JavaScript (javascript)

原因是声明只在循环体开始之前评估一次。

摘要

  • const 关键字创建对值的只读引用。只读引用不能重新分配,但可以更改值。
  • const 关键字声明的变量是块级作用域的,不能重新声明。
本教程对您有帮助吗?