JavaScript const

JavaScript 在 ES6 (2015) 中引入了 const 关键字声明常量变量。用 const 定义的变量是一个常量值,不能重新声明、不能重新赋值并且具有作用域。

JavaScript 在 ES6 (2015) 中引入了 const 关键字声明常量变量。用 const 定义的变量是一个常量值,不能重新声明、不能重新赋值并且具有作用域。

声明时必须赋值

JavaScript 的 const 变量在声明时必须赋值(初始化)。

正确的用法:

const PI = 3.14159265359;

不正确的用法:

const PI;
PI = 3.14159265359;

上述代码在浏览器中会报错,提示信息因浏览器而异:

  • 谷歌浏览器 chrome: Uncaught SyntaxError: Missing initializer in const declaration
  • 火狐 Firefox: Uncaught SyntaxError: missing = in const declaration

什么时候使用 const?

使用 const 声明的变量是不可变更的,称之为常量。作为一般规则,除非知道变量的值会改变,否则始终使用 const 声明变量。

除非有特殊目的,否则当声明下列对象时使用 const

  • 数组 Array
  • 对象
  • 函数
  • 正则表达式
  • Map
  • Set

使用 const 声明一个数组或者一个对象的变量,不是说这个对象或者数组不能修改,而是说这个变量不能再被赋值为其他数组或对象或值。但是你可以对数组或者对象本身进行操作,比如在数组中增加或者删除元素,修改对象的属性值等。

常量数组

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

// 定义一个常量数组
const men = ["张三", "李四", "王五"];
// 改变某个元素的值
men[0] = "张大";
// 给数组添加一个元素
men.push("赵六");

但是您不能重新分配数组:

// 定义一个常量数组
const men = ["张三", "李四", "王五"];

men = ["李四", "王五"]; // 错误,不能重复赋值

常量对象

您可以更改常量对象的属性:

// 创建一个常量对象
const man = { name: "张三", age: 30 };

// 修改对象的属性值
man.age = 28;

// 给对象添加一个属性
car.height = 165;

但是您不能重新分配对象:

const man = { name: "张三", age: 30 };
car = { name: "李四", age: 30 }; // 错误,不能重复赋值

块作用域

const 变量的作用域与 let 一样,都是局限在当前块之内。

在本例中,在块中声明的 x 与在块外声明的 x 不同:

const x = 10;
console.log("x =", x); // 输出: x = 10
{
  const x = 2;
  console.log("x =", x); // 输出: x = 2
}

console.log("x =", x); // 输出: x = 10

您可以在JavaScript Scope一章中了解有关块作用域的更多信息。

重新声明

允许使用 var 在程序中的任何地方重新声明 JavaScript 变量。

var x = 2; // 正确
var x = 3; // 正确
x = 4; // 正确

不允许在同一块作用域范围内将现有 varlet 变量重新声明为 const

var x = 2; // 正确
const x = 2; // 错误

{
  let x = 2; // 正确
  const x = 2; // 错误
}

{
  const x = 2; // 正确
  const x = 2; // 错误
}

const 变量不允许在同一范围内重新赋值:

const x = 2; // 正确
x = 2; // 错误
var x = 2; // 错误
let x = 2; // 错误
const x = 2; // 错误

{
  const x = 2; // 正确
  x = 2; // 错误
  var x = 2; // 错误
  let x = 2; // 错误
  const x = 2; // 错误
}

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

const x = 2; // 正确
{
  const x = 3; // 正确
}

{
  const x = 4; // 正确
}

浏览器支持

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

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

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