This is an experimental technology, part of the ECMAScript 6 (Harmony) proposal.
Because this technology's specification has not stabilized, check the compatibility table for usage in various browsers. Also note that the syntax and behavior of an experimental technology is subject to change in future version of browsers as the spec changes.
The const declaration creates a read-only named constant.
Syntax
const name1 = value1 [, name2 = value2 [, ... [, nameN = valueN]]];
nameN- Constant name. It can be any legal identifier.
valueN- Value of the constant. It can be any legal expression.
Description
This declaration creates a constant that can be global or local to the function in which it is declared. Constants are block-scoped. The value of a constant cannot change through re-assignment, and a constant cannot be re-declared. An initializer for a constant is required. A constant cannot share its name with a function or a variable in the same scope.
Examples
The following example demonstrates how constants behave. Try this in your browser console.
// define my_fav as a constant and give it the value 7
const my_fav = 7;
// this will fail silently in Firefox and Chrome (but does not fail in Safari)
my_fav = 20;
// will print 7
console.log("my favorite number is: " + my_fav);
// trying to redeclare a constant throws an error
const my_fav = 20;
// the name my_fav is reserved for constant above, so this will also fail
var my_fav = 20;
// my_fav is still 7
console.log("my favorite number is " + my_fav);
// Assigning to a const variable is a syntax error
const a = 1; a = 2;
// const requires an initializer
const foo; // SyntaxError: missing = in const declaration
// const also works on objects
const myObject = {"key": "value"};
// Overwriting the object fails as above (in Firefox and Chrome but not in Safari)
myObject = {"otherKey": "value"};
// However, object attributes are not protected,
// so the following statement is executed without problems
myObject.key = "otherValue";
Specifications
| Specification | Status | Comment |
|---|---|---|
| ECMAScript 6 (ECMA-262) The definition of 'Let and Const Declarations' in that specification. |
Release Candidate | Initial definition. |
Browser compatibility
| Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Basic support | ? | 36.0 (maybe earlier) | IE11 | 12.00 (maybe earlier) | 5.1.7 (maybe earlier) |
|
Reassignment fails |
20 | 13 (13) | IE11 | ? | ? |
| Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| Basic support | ? | ? | ? | ? | ? | ? |
| Reassignment fails | ? | ? | ? | ? | ? | ? |
Notes
In earlier versions of Firefox & Chrome and as of Safari 5.1.7 and Opera 12.00, if you define a variable with const, you can still change its value later. It is not supported in Internet Explorer 6-10, but is included in Internet Explorer 11.
Firefox-specific notes
The const declaration has been implemented in Firefox long before const appeared in the ECMAScript 6 specification. For const ES6 compliance see bug 950547 and bug 611388.
- Starting with Gecko 36 (Firefox 36 / Thunderbird 36 / SeaMonkey 2.33):
{const a=1};anow throws aReferenceErrorand does not return1anymore due to block-scoping.const a;now throws aSyntaxError("missing = in const declaration"): An initializer is required.const a = 1; a = 2;now also throws aSyntaxError("invalid assignment to const a").