原文連接: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").