Path: blob/main/files/en-us/web/javascript/reference/statements/const/index.md
6520 views
------{{jsSidebar("Statements")}}
The const declaration creates block-scoped constants, much like variables declared using the let keyword. The value of a constant can't be changed through reassignment (i.e. by using the assignment operator), and it can't be redeclared (i.e. through a variable declaration). However, if a constant is an object or array its properties or items can be updated or removed.
{{EmbedInteractiveExample("pages/js/statement-const.html")}}
Syntax
nameN: The constant's name, which can be any legal {{Glossary("identifier")}}.
valueN: The constant's value. This can be any legal expression, including a function expression.
The destructuring assignment syntax can also be used to declare variables.
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 {{domxref("window")}} object, unlike {{jsxref("Statements/var", "var")}} variables.
An initializer for a constant is required. You must specify its value in the same declaration. (This 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 {{jsxref("Statements/let", "let")}} and const. For this reason, const declarations are commonly regarded as non-hoisted.
A constant cannot share its name with a function or a variable in the same scope.
If you're experimenting in a REPL, such as the Firefox web console (Tools > Web Developer > Web Console), and you run two const declarations with the same name in two separate inputs, you may get a syntax error due to re-declaration. See further discussion of this issue in Firefox bug 1580891. The Chrome console allows const re-declarations between different REPL inputs.
Unlike var, const begins declarations, not statements. That means you cannot use a lone const declaration as the body of a block (which makes sense, since there's no way to access the variable).
Examples
Basic const usage
Constants can be declared with uppercase or lowercase, but a common convention is to use all-uppercase letters.
Block scoping
It's important to note the nature of block scoping.
const needs to be initialized
const in objects and arrays
const also works on objects and arrays. Attempting to overwrite the object throws an error "Assignment to constant variable".
However, object keys are not protected, so the following statement is executed without problem.
You would need to use Object.freeze() to make an object immutable.
The same applies to arrays. Assigning a new array to the variable throws an error "Assignment to constant variable".
Still, it's possible to push items into the array and thus mutate it.
Specifications
{{Specifications}}
Browser compatibility
{{Compat}}
See also
{{jsxref("Statements/var", "var")}}
{{jsxref("Statements/let", "let")}}