二维码

JavaScript 数组常量

JavaScript 数组常量


ECMAScript 2015 (ES6)

2015 年,JavaScript 引入了一个重要的新关键字:const

使用以下命令声明数组已成为一种常见的做法:const

1
const cars = ["Saab", "Volvo", "BMW"];  


无法重新分配

const 声明的数组不能重新赋值:

1
2
const cars = ["Saab", "Volvo", "BMW"];  
cars = ["Toyota", "Volvo", "Audi"];    // ERROR


数组不是常量

关键词const有点误导。

它不定义常量数组。它定义了对数组的常量引用。

因此,我们仍然可以更改常量数组的元素。


可以重新分配元素

您可以更改常量数组的元素:

1
2
3
4
5
6
7
8
// You can create a constant array:  
const cars = ["Saab", "Volvo", "BMW"];

// You can change an element:
cars[0] = "Toyota";

// You can add an element:
cars.push("Audi");


浏览器支持

Internet Explorer 10 或更早版本不支持const关键字。

下表定义了完全支持const关键字的第一个浏览器版本:

Chrome 49 IE 11 / Edge Firefox 36 Safari 10 Opera 36
Mar, 2016 Oct, 2013 Feb, 2015 Sep, 2016 Mar, 2016

声明时分配

JavaScript const变量在声明时必须被赋值:

含义:使用const声明的数组在声明时必须进行初始化。

在不初始化数组的情况下使用const是一种语法错误:

:这是行不通的
1
2
const cars;  
cars = ["Saab", "Volvo", "BMW"];

var声明的数组可以随时初始化。

您甚至可以在声明数组之前使用它:

:这没关系
1
2
cars = ["Saab", "Volvo", "BMW"];  
var cars;


Const 块作用域

const声明的数组具有块作用域

在块中声明的数组与在块外声明的数组不同:

1
2
3
4
5
6
7
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 声明的数组没有块作用域:

1
2
3
4
5
6
7
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"**


重新声明数组

在程序中的任何位置都允许重新声明声明的数组:var

1
2
3
var cars = ["Volvo", "BMW"];   // Allowed  
var cars = ["Toyota", "BMW"];  // Allowed
cars = ["Volvo", "Saab"];      // Allowed

将数组重新声明或重新分配给 ,或 不允许使用相同的块:const

1
2
3
4
5
6
var cars = ["Volvo", "BMW"];     // Allowed  
const cars = ["Volvo", "BMW"];   // Not allowed
{
  var cars = ["Volvo", "BMW"];   // Allowed
  const cars = ["Volvo", "BMW"]; // Not allowed
}

重新声明或重新分配现有数组,在同一作用域中,或 不允许使用相同的块:const

1
2
3
4
5
6
7
8
9
10
11
const cars = ["Volvo", "BMW"];   // Allowed  
const cars = ["Volvo", "BMW"];   // Not allowed
var cars = ["Volvo", "BMW"];     // Not allowed
cars = ["Volvo", "BMW"];         // Not allowed

{
  const cars = ["Volvo", "BMW"]; // Allowed
  const cars = ["Volvo", "BMW"]; // Not allowed
  var cars = ["Volvo", "BMW"];   // Not allowed
  cars = ["Volvo", "BMW"];       // Not allowed
}

允许在另一个作用域或另一个块中使用const重新声明数组:

1
2
3
4
5
6
7
const cars = ["Volvo", "BMW"];   // Allowed  
{
  const cars = ["Volvo", "BMW"]; // Allowed
}
{
  const cars = ["Volvo", "BMW"]; // Allowed
}