ECMAScriptjs常量

初稿链接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/const

const
注脚创造三个只读的常量。那不意味着常量指向的值不可变,而是变量标识符的值只可以赋值2回。(译者注:JavaScript中的常量和Java,C++中的常量一个情趣。注意区分常量的值和常量指向的值的不相同)

语法EDIT

const name1 = value1 [, name2 = value2 [, ... [, nameN = valueN]]];

nameN
常量名称,能够是自由合法的identifier(标识符)。

valueN
常量值,能够是轻易合法的表达式

描述EDIT

本条宣称创制了二个常量,能够在全局作用域恐怕函数内评释常量,常量须求被初步化。那就是说,在概念常量的还要务必起初化(那是有含义的,鉴于变量的值在伊始化后就无法更改)。

常量拥有块功能域,和使用let 定义的变量十三分相似。常量的值无法由此再赋值改变,也不能够再度宣称。

1个常量不能够和它所在成效域内的其余变量或函数拥有相同的称呼。

例子EDIT

上边包车型地铁例子演示了常量的风味。在浏览器的支配台试一下以此例子。

// 注意: 常量在声明的时候可以使用大小写,但通常情况下会使用全部大写英文。 

// 定义常量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";

规范EDIT

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  

浏览器包容性EDIT

 

  • Desktop
  • Mobile
Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari
Basic support 21 (Yes) 36 (36) 11 12 5.1
Reassignment fails 20 (Yes) 13 (13) 11 ? ?

 

包容性表达EDIT

在Firefox和Chrome更早期的版本,Safari 5.1.7和Opera
12.00,假使选择const定义2个变量,那个变量的值照旧能够修改。IE6-10
不帮助 const,可是IE11支撑。

Firefox-specific notes

在常量被列出ECMAScript 2016(ES6)标准很久在此以前,火狐就曾经支撑常量。  const ES6
请参照 bug 950547 and bug 611388.

  • 从 Gecko 36开始 (Firefox 36 / Thunderbird 36 / SeaMonkey 2.33):
    • {const a=1};a 出现 ReferenceError 且由于功能域不在重返1
      .
    • const a; 现在会面世  SyntaxError语法错误 (“missing
      = in const declaration"): 必须有叁个起来值.
    • const a = 1; a = 2; 今后会冒出 SyntaxError语法错误
      (“invalid assignment to const a”).