原文连接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/constgit
const 声明建立一个只读的常量。这不意味着常量指向的值不可变,而是变量标识符的值只能赋值一次。(译者注:JavaScript中的常量和Java,C++中的常量一个意思。注意区分常量的值和常量指向的值的不一样)github
const name1 = value1 [, name2 = value2 [, ... [, nameN = valueN]]];
nameN
valueN
这个声明建立了一个常量,能够在全局做用域或者函数内声明常量,常量须要被初始化。这就是说,在定义常量的同时必须初始化(这是有意义的,鉴于变量的值在初始化后就不能改变)。浏览器
常量拥有块做用域,和使用let
定义的变量十分类似。常量的值不能经过再赋值改变,也不能再次声明。ide
一个常量不能和它所在做用域内的其余变量或函数拥有相同的名称。函数
下面的例子演示了常量的特性。在浏览器的控制台试一下这个例子。ui
// 注意: 常量在声明的时候可使用大小写,但一般状况下会使用所有大写英文。 // 定义常量MY_FAV并赋值7 const MY_FAV = 7; // 在 Firefox 和 Chrome 这会失败但不会报错(在 Safari这个赋值会成功) MY_FAV = 20; // 输出 7 console.log("my favorite number is: " + MY_FAV); // 尝试从新声明会报错 const MY_FAV = 20; // MY_FAV 保留给上面的常量,这个操做会失败 var MY_FAV = 20; // MY_FAV 依旧为7 console.log("my favorite number is " + MY_FAV); // 下面是一个语法错误 const A = 1; A = 2; // 常量要求一个初始值 const FOO; // SyntaxError: missing = in const declaration // 常量能够定义成对象 const MY_OBJECT = {"key": "value"}; // 重写对象和上面同样会失败 MY_OBJECT = {"OTHER_KEY": "value"}; // 对象属性并不在保护的范围内,下面这个声明会成功执行 MY_OBJECT.key = "otherValue";
Specification | Status | Comment |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) Let and Const Declarations |
Standard | Initial definition. |
ECMAScript 2017 Draft (ECMA-262) Let and Const Declarations |
Draft |
在Firefox和Chrome更早期的版本,Safari 5.1.7和Opera 12.00,若是使用const定义一个变量,这个变量的值仍然能够修改。IE6-10 不支持 const,可是IE11支持。this
在常量被列出ECMAScript 2015 (ES6)标准好久以前,火狐就已经支持常量。 const
ES6 请参照 bug 950547 and bug 611388.spa
{const a=1};a
出现 ReferenceError
且因为做用域不在返回1 .const a;
如今会出现 SyntaxError语法错误
("missing = in const declaration"
): 必须有一个初始值.const a = 1; a = 2;
如今会出现 SyntaxError
语法错误 ("invalid assignment to const a").