The const
keyword was introduced in ES6 (2015).
Variables defined with const
cannot be Redeclared.
Variables defined with const
cannot be Reassigned.
Variables defined with const
have Block Scope.
Cannot be Reassigned
A const
variable cannot be reassigned:
Example
<!DOCTYPE html> <html> <body> <h2>JavaScript const</h2> <p id="demo"></p> <script> try { const PI = 3.141592653589793; PI = 3.14; } catch (err) { document.getElementById("demo").innerHTML = err; } </script> </body> </html>
Result:
JavaScript const
TypeError: Assignment to constant variable.
Must be Assigned
JavaScript const
variables must be assigned a value when they are declared:
Correct
const PI = 3.14159265359;
Incorrect
const PI;
PI = 3.14159265359;
When to use JavaScript const?
As a general rule, always declare a variable with const
unless you know that the value will change.
Use const
when you declare:
- A new Array
- A new Object
- A new Function
- A new RegExp
Constant Objects and Arrays
The keyword const
is a little misleading.
It does not define a constant value. It defines a constant reference to a value.
Because of this you can NOT:
- Reassign a constant value
- Reassign a constant array
- Reassign a constant object
- Change the elements of constant array
- Change the properties of constant object
Constant Arrays
You can change the elements of a constant array:
Example
<!DOCTYPE html> <html> <body> <h2>JavaScript const</h2> <p>Declaring a constant array does NOT make the elements unchangeable:</p> <p id="demo"></p> <script> // Create an Array: const cars = ["Saab", "Volvo", "BMW"]; // Change an element: cars[0] = "Toyota"; // Add an element: cars.push("Audi"); // Display the Array: document.getElementById("demo").innerHTML = cars; </script> </body> </html>
Result:
JavaScript const
Declaring a constant array does NOT make the elements unchangeable:
Toyota,Volvo,BMW,Audi
But you can NOT reassign the array:
Example
<!DOCTYPE html> <html> <body> <h2>JavaScript const</h2> <p>You can NOT reassign a constant array:</p> <p id="demo"></p> <script> try { const cars = ["Saab", "Volvo", "BMW"]; cars = ["Toyota", "Volvo", "Audi"]; } catch (err) { document.getElementById("demo").innerHTML = err; } </script> </body> </html>
Result:
JavaScript const
You can NOT reassign a constant array:
TypeError: Assignment to constant variable.
Constant Objects
You can change the properties of a constant object:
Example
<!DOCTYPE html> <html> <body> <h2>JavaScript const</h2> <p>Declaring a constant object does NOT make the objects properties unchangeable:</p> <p id="demo"></p> <script> // Create an object: const car = {type:"Fiat", model:"500", color:"white"}; // Change a property: car.color = "red"; // Add a property: car.owner = "Johnson"; // Display the property: document.getElementById("demo").innerHTML = "Car owner is " + car.owner; </script> </body> </html>
Result:
JavaScript const
Declaring a constant object does NOT make the objects properties unchangeable:
Car owner is Johnson
Example
<!DOCTYPE html> <html> <body> <h2>JavaScript const</h2> <p>You can NOT reassign a constant object:</p> <p id="demo"></p> <script> try { const car = {type:"Fiat", model:"500", color:"white"}; car = {type:"Volvo", model:"EX60", color:"red"}; } catch (err) { document.getElementById("demo").innerHTML = err; } </script> </body> </html>
Result:
JavaScript const
You can NOT reassign a constant object:
TypeError: Assignment to constant variable.
Browser Support
The const
keyword is not supported in Internet Explorer 10 or earlier.
The following table defines the first browser versions with full support for the const
keyword:
Google Chrome | Internet Explorer | Mozilla Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 49 | IE 11 / Edge | Firefox 36 | Safari 10 | Opera 36 |
Mar, 2016 | Oct, 2013 | Feb, 2015 | Sep, 2016 | Mar, 2016 |
Block Scope
Declaring a variable with const
is similar to let
when it comes to Block Scope.
The x declared in the block, in this example, is not the same as the x declared outside the block:
Example
<!DOCTYPE html> <html> <body> <h2>JavaScropt const variables has block scope</h2> <p id="demo"></p> <script> const x = 10; // Here x is 10 { const x = 2; // Here x is 2 } // Here x is 10 document.getElementById("demo").innerHTML = "x is " + x; </script> </body> </html>
Result:
JavaScropt const variables has block scope
x is 10
You can learn more about block scope in the chapter JavaScript Scope.
Redeclaring
Redeclaring a JavaScript var
variable is allowed anywhere in a program:
Example
var x = 2; // Allowed
var x = 3; // Allowed
x = 4; // Allowed
Redeclaring an existing var
or let
variable to const
, in the same scope, is not allowed:
Example
var x = 2; // Allowed
const x = 2; // Not allowed
{
let x = 2; // Allowed
const x = 2; // Not allowed
}
{
const x = 2; // Allowed
const x = 2; // Not allowed
}
Reassigning an existing const
variable, in the same scope, is not allowed:
Example
const x = 2; // Allowed
x = 2; // Not allowed
var x = 2; // Not allowed
let x = 2; // Not allowed
const x = 2; // Not allowed
{
const x = 2; // Allowed
x = 2; // Not allowed
var x = 2; // Not allowed
let x = 2; // Not allowed
const x = 2; // Not allowed
}
Redeclaring a variable with const
, in another scope, or in another block, is allowed:
Example
const x = 2; // Allowed
{
const x = 3; // Allowed
}
{
const x = 4; // Allowed
}
Const Hoisting
Variables defined with var
are hoisted to the top and can be initialized at any time.
Meaning: You can use the variable before it is declared:
Example
This is OK:
<!DOCTYPE html> <html> <body> <h2>JavaScript Hoisting</h2> <p>With <b>var</b>, you can use a variable before it is declared:</p> <p id="demo"></p> <script> carName = "Volvo"; document.getElementById("demo").innerHTML = carName; var carName; </script> </body> </html>
Result:
JavaScript Hoisting
With var, you can use a variable before it is declared:
Volvo
If you want to learn more about hoisting, study the chapter JavaScript Hoisting.
Variables defined with const
are also hoisted to the top, but not initialized.
Meaning: Using a const
variable before it is declared will result in a ReferenceError
:
Example
<!DOCTYPE html> <html> <body> <h2>JavaScript Hoisting</h2> <p>With <b>const</b>, you cannot use a variable before it is declared:</p> <p id="demo"></p> <script> try { alert(carName); const carName = "Volvo"; } catch (err) { document.getElementById("demo").innerHTML = err; } </script> </body> </html>
Result:
JavaScript Hoisting
With const, you cannot use a variable before it is declared:
ReferenceError: Cannot access ‘carName’ before initialization