JavaScript const 数组常量
ECMAScript 2015 (ES6)
2015 年,JavaScript 引入了一个重要的全新关键字:const。
现在,使用 const 声明数组已成为一种常见的做法:
无法重新赋值
使用 const 声明的数组不能重新赋值:
数组不是常量
关键字 const 有点误导人。
它并没有定义一个常量数组,而是定义了一个指向数组的常量引用。
正因如此,我们仍然可以修改常量数组的元素。
元素可以重新赋值
您可以更改常量数组的元素:
示例
// 您可以创建一个常量数组:
const cars = ["Saab", "Volvo", "BMW"];
// 您可以更改元素:
cars[0] = "Toyota";
// 您可以添加一个元素:
cars.push("Audi");
亲自试一试 »声明时必须赋值
JavaScript const 变量必须在声明时赋值:
含义:使用 const 声明的数组必须在声明时进行初始化。
使用 const 而不初始化数组是语法错误:
示例
这样做行不通:
const cars;
cars = ["Saab", "Volvo", "BMW"];
使用 var 声明的数组可以随时初始化。
甚至可以在声明数组之前使用它:
常量块作用域
使用 const 声明的数组具有块作用域。
在代码块中声明的数组与在代码块外声明的数组不同:
示例
const cars = ["Saab", "Volvo", "BMW"];
// Here cars[0] is "Saab"
{
const cars = ["Toyota", "Volvo", "BMW"];
// Here cars[0] is "Toyota"
}
// Here cars[0] is "Saab"亲自试一试 »使用 var 声明的数组没有块级作用域:
示例
var cars = ["Saab", "Volvo", "BMW"];
// Here cars[0] is "Saab"
{
var cars = ["Toyota", "Volvo", "BMW"];
// Here cars[0] is "Toyota"
}
// Here cars[0] is "Toyota"亲自试一试 »您可以在以下章节中了解更多关于块作用域的内容:JavaScript 作用域。
重新声明数组
在程序的任何位置,都允许重新声明用 var 声明的数组:
示例
var cars = ["Volvo", "BMW"]; // 允许
var cars = ["Toyota", "BMW"]; // 允许
cars = ["Volvo", "Saab"]; // 允许
在同一作用域或同一代码块中,不允许将数组重新声明或重新赋值给 const。
示例
var cars = ["Volvo", "BMW"]; // 允许
const cars = ["Volvo", "BMW"]; // 不允许
{
var cars = ["Volvo", "BMW"]; // 允许
const cars = ["Volvo", "BMW"]; // 不允许
}在同一作用域或同一代码块中,不允许重新声明或重新赋值已存在的 const 数组:
示例
const cars = ["Volvo", "BMW"]; // 允许
const cars = ["Volvo", "BMW"]; // 不允许
var cars = ["Volvo", "BMW"]; // 不允许
cars = ["Volvo", "BMW"]; // 不允许
{
const cars = ["Volvo", "BMW"]; // 允许
const cars = ["Volvo", "BMW"]; // 不允许
var cars = ["Volvo", "BMW"]; // 不允许
cars = ["Volvo", "BMW"]; // 不允许
}在另一个作用域或另一个代码块中,使用 const 重新声明数组是允许的:
示例
const cars = ["Volvo", "BMW"]; // 允许
{
const cars = ["Volvo", "BMW"]; // 允许
}
{
const cars = ["Volvo", "BMW"]; // 允许
}