Klíčové slovo const
bylo zavedeno v ES6 (2015)
Proměnné definované pomocí const
nelze znovu deklarovat
Proměnné definované pomocí const
nelze změnit přiřazení
Proměnné definované pomocí const
mají Rozsah bloku
Proměnnou const
nelze znovu přiřadit:
const PI = 3.141592653589793;
PI = 3.14; // This will give an error
PI = PI + 10; // This will also give an error
Zkuste to sami →
<!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>
Proměnným const
JavaScriptu musí být při deklaraci přiřazena hodnota:
const PI = 3.14159265359;
const PI;
PI = 3.14159265359;
Vždy deklarujte proměnnou pomocí const
, když víte, že hodnota by se neměla měnit.
Když deklarujete, použijte const
:
Nové pole
Nový objekt
Nová funkce
Nový RegExp
Klíčové slovo const
je trochu zavádějící.
Nedefinuje konstantní hodnotu. Definuje konstantní odkaz na hodnotu.
Z tohoto důvodu NEMŮŽETE:
Znovu přiřaďte konstantní hodnotu
Změňte přiřazení konstantního pole
Znovu přiřadit konstantní objekt
Ale MŮŽETE:
Změňte prvky konstantního pole
Změňte vlastnosti konstantního objektu
Prvky konstantního pole můžete změnit:
// You can create a constant array:
const cars = ["Saab", "Volvo", "BMW"];
// You can change an element:
cars[0] = "Toyota";
// You can add an element:
cars.push("Audi");
Zkuste to sami →
<!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>
Ale NELZE znovu přiřadit pole:
const cars = ["Saab", "Volvo", "BMW"];
cars = ["Toyota", "Volvo", "Audi"]; // ERROR
Zkuste to sami →
<!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>
Vlastnosti konstantního objektu můžete změnit:
// You can create a const object:
const car = {type:"Fiat", model:"500", color:"white"};
// You can change a property:
car.color = "red";
// You can add a property:
car.owner = "Johnson";
Zkuste to sami →
<!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>
Objekt však NEMŮŽETE znovu přiřadit:
const car = {type:"Fiat", model:"500", color:"white"};
car = {type:"Volvo", model:"EX60", color:"red"}; //
ERROR
Zkuste to sami →
<!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>
Scope | Redeclare | Reassign | Hoisted | Binds this | |
var | No | Yes | Yes | Yes | Yes |
let | Yes | No | Yes | No | No |
const | Yes | No | No | No | No |
let
a const
mají rozsah bloku.
let
a const
nelze znovu deklarovat.
let
a const
musí být před použitím deklarováno.
let
a const
neváže na toto
.
let
a const
nejsou zvednuty.
var
nemusí být deklarován.
var
je zvednut.
var
se k tomu váže.
Klíčová slova let
a const
jsou není podporováno v aplikaci Internet Explorer 11 nebo starší.
Následující tabulka definuje první verze prohlížečů s plnou podporou:
Chrome 49 | Edge 12 | Firefox 36 | Safari 11 | Opera 36 |
Mar, 2016 | Jul, 2015 | Jan, 2015 | Sep, 2017 | Mar, 2016 |
Deklarování proměnné pomocí const
je podobné jako let
pokud jde o Rozsah blokování.
X deklarované v bloku v tomto příkladu není stejné jako x deklarované mimo blok:
const x = 10;
// Here x is 10
{
const x = 2;
// Here x is 2
}
// Here x is 10
Zkuste to sami →
<!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>
Více o rozsahu bloku se dozvíte v kapitole Rozsah JavaScriptu.
Opětovné deklarování proměnné var
JavaScriptu je povoleno kdekoli v programu:
var x = 2; // Allowed
var x = 3; // Allowed
x = 4; // Allowed
Opětovné deklarování stávajícího var
nebo let
proměnná na const
ve stejném rozsahu není povolena:
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
}
Opětovné přiřazení existující proměnné const
ve stejném rozsahu není povoleno:
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
}
Opětovné deklarování proměnné pomocí const
v jiném rozsahu nebo v jiném bloku je povoleno:
const x = 2; // Allowed
{ const x = 3; // Allowed
}
{
const x = 4; // Allowed
}
Proměnné definované pomocí var
jsou vyzvednuty nahoru a lze je kdykoli inicializovat.
Význam: Proměnnou můžete použít před jejím deklarováním:
Toto je v pořádku:
carName = "Volvo";
var carName;
Zkuste to sami →
<!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>
Pokud se chcete o zvedání dozvědět více, prostudujte si kapitolu JavaScript zvedání. <p>Proměnné definované pomocí const
jsou také vyzdviženy nahoru, ale neinicializováno.
Význam: Použití proměnné const
před jejím deklarováním povede k ReferenceError
:
alert (carName);
const carName = "Volvo";
Zkuste to sami →
<!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>