JavaScript 数组常量
ECMAScript 2015 (ES6)
在 2015 年,JavaScript 引入了一个重要的新关键字:const
。
使用 const
声明数组已成为一种常见做法。
不能重新赋值
使用 const
声明的数组不能重新赋值。
数组不是常量
关键字 const
有点误导性。
它不会定义一个常量数组。它定义了一个指向数组的常量引用。
因此,我们仍然可以更改常量数组的元素。
元素可以重新赋值
您可以更改常量数组的元素
示例
// 您可以创建一个常量数组
const cars = ["Saab", "Volvo", "BMW"];
// 您可以更改一个元素
cars[0] = "Toyota";
// 您可以添加一个元素
cars.push("Audi");
自己尝试 »
浏览器支持
Internet Explorer 10 或更早版本不支持 const
关键字。
下表定义了第一个完全支持 const
关键字的浏览器版本。
Chrome 49 | IE 11 / Edge | Firefox 36 | Safari 10 | Opera 36 |
2016 年 3 月 | 2013 年 10 月 | 2015 年 2 月 | 2016 年 9 月 | 2016 年 3 月 |
声明时赋值
JavaScript const
变量必须在声明时赋值。
意思是:使用 const
声明的数组必须在声明时初始化。
在没有初始化数组的情况下使用 const
会导致语法错误。
示例
这不会起作用
const cars;
cars = ["Saab", "Volvo", "BMW"];
使用 var
声明的数组可以在任何时候初始化。
您甚至可以在声明之前使用数组。
Const 块级作用域
使用 const
声明的数组具有 **块级作用域**。
在块中声明的数组与在块外声明的数组不同。
示例
const cars = ["Saab", "Volvo", "BMW"];
// 此处 cars[0] 为 "Saab"
{
const cars = ["Toyota", "Volvo", "BMW"];
// 此处 cars[0] 为 "Toyota"
}
// 此处 cars[0] 为 **"Saab"**
自己尝试 »
使用 var
声明的数组没有块级作用域。
示例
var cars = ["Saab", "Volvo", "BMW"];
// 此处 cars[0] 为 "Saab"
{
var cars = ["Toyota", "Volvo", "BMW"];
// 此处 cars[0] 为 "Toyota"
}
// 此处 cars[0] 为 **"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"]; // 允许
}