Our volunteers haven't translated this article into Tiếng Việt yet. Join us and help get the job done!
You can also read the article in English (US).
let
statement. The value of a constant cannot change through reassignment, and it can't be redeclared.The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Syntax
const name1 = value1 [, name2 = value2 [, ... [, nameN = valueN]]];
nameN
- The constant's name, which can be any legal identifier.
valueN
- The constant's value; this can be any legal expression, including a function expression.
Description
This declaration creates a constant whose scope can be either global or local to the block in which it is declared. Global constants do not become properties of the window object, unlike var
variables. An initializer for a constant is required; that is, you must specify its value in the same statement in which it's declared (which makes sense, given that it can't be changed later).
The const
declaration creates a read-only reference to a value. It does not mean the value it holds is immutable, just that the variable identifier cannot be reassigned. For instance, in the case where the content is an object, this means the object's contents (e.g., its properties) can be altered.
All the considerations about the "temporal dead zone" apply to both let
and const
.
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.
// NOTE: Constants can be declared with uppercase or lowercase, but a common // convention is to use all-uppercase letters. // define MY_FAV as a constant and give it the value 7 const MY_FAV = 7; // this will throw an error - Uncaught TypeError: Assignment to constant variable. MY_FAV = 20; // MY_FAV is 7 console.log('my favorite number is: ' + MY_FAV); // trying to redeclare a constant throws an error - Uncaught SyntaxError: Identifier 'MY_FAV' has already been declared const MY_FAV = 20; // the name MY_FAV is reserved for constant above, so this will fail too var MY_FAV = 20; // this throws an error too let MY_FAV = 20; // it's important to note the nature of block scoping if (MY_FAV === 7) { // this is fine and creates a block scoped MY_FAV variable // (works equally well with let to declare a block scoped non const variable) let MY_FAV = 20; // MY_FAV is now 20 console.log('my favorite number is ' + MY_FAV); // this gets hoisted into the global context and throws an error var MY_FAV = 20; } // MY_FAV is still 7 console.log('my favorite number is ' + MY_FAV); // throws an error - Uncaught SyntaxError: Missing initializer in const declaration const FOO; // const also works on objects const MY_OBJECT = {'key': 'value'}; // Attempting to overwrite the object throws an error - Uncaught TypeError: Assignment to constant variable. MY_OBJECT = {'OTHER_KEY': 'value'}; // However, object keys are not protected, // so the following statement is executed without problem MY_OBJECT.key = 'otherValue'; // Use Object.freeze() to make object immutable // The same applies to arrays const MY_ARRAY = []; // It's possible to push items into the array MY_ARRAY.push('A'); // ["A"] // However, assigning a new array to the variable throws an error - Uncaught TypeError: Assignment to constant variable. MY_ARRAY = ['B'];
Specifications
Specification | Status | Comment |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'Let and Const Declarations' in that specification. |
Standard | Initial definition. |
ECMAScript Latest Draft (ECMA-262) The definition of 'Let and Const Declarations' in that specification. |
Draft | No changes. |
Browser compatibility
Desktop | Mobile | Server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Basic support | Chrome Full support 21 | Edge Full support Yes | Firefox
Full support
36
| IE Full support 11 | Opera Full support Yes | Safari Full support 5.1 | WebView Android Full support Yes | Chrome Android Full support Yes | Edge Mobile Full support Yes | Firefox Android
Full support
36
| Opera Android Full support Yes | Safari iOS Full support Yes | Samsung Internet Android Full support Yes | nodejs Full support Yes |
Legend
- Full support
- Full support
- See implementation notes.
- See implementation notes.