Const JS
A const palavra-chave foi introduzida em ES6 (2015).
Variáveis definidas com const não podem ser redeclaradas.
Variáveis definidas com const não podem ser reatribuídas.
As variáveis definidas com const têm Bloco de Escopo.
Não pode ser reatribuído
Uma const variável não pode ser reatribuída:
Exemplo:
const PI = 3.141592653589793;
PI = 3.14; // This will give an error
PI = PI + 10; // This will also give an error
Deve ser atribuído
As const variáveis JavaScript devem receber um valor ao serem declaradas:
Correto
const PI = 3.14159265359;
Incorreto
const PI;
PI = 3.14159265359;
Quando usar JavaScript const?
Como regra geral, sempre declare uma variável com, a const menos que você saiba que o valor será alterado.
Use const ao declarar:
• Um novo Array
• Um novo objeto
• Uma nova função
• Um novo RegExp
Objetos e matrizes const antes
A palavra const- chave é um pouco enganosa.
Não define um valor constante. Ele define uma referência constante a um valor.
Por causa disso, você NÃO pode:
• Reatribuir um valor constante
• Reatribuir uma matriz constante
• Reatribuir um objeto constante
Mas você pode:
• Altere os elementos da matriz constante
• Altere as propriedades do objeto constante
Matrizes constantes
Você pode alterar os elementos de uma matriz constante:
Exemplo:
// 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");
Mas você NÃO pode reatribuir a matriz:
Exemplo:
const cars = ["Saab", "Volvo", "BMW"];
cars = ["Toyota", "Volvo", "Audi"]; // ERROR
Objetos Constantes
Você pode alterar as propriedades de um objeto constante:
Exemplo:
// 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";
Mas você NÃO pode reatribuir o objeto:
Exemplo:
const car = {type:"Fiat", model:"500", color:"white"};
car = {type:"Volvo", model:"EX60", color:"red"}; // ERROR
Suporte para navegador
A const palavra-chave não é compatível com o Internet Explorer 10 ou anterior.
A tabela a seguir define as primeiras versões do navegador com suporte total para a const palavra-chave:
Chrome 49 | IE 11 / Edge | Firefox 36 | Safari 10 | Opera 36 |
Mar, 2016 | Oct, 2013 | Feb, 2015 | Sep, 2016 | Mar, 2016 |
Escopo do Bloco
Declarar uma variável com const é semelhante a let quando se trata de Block Scope.
O x declarado no bloco, neste exemplo, não é o mesmo o x declarado fora do bloco:
Exemplo:
const x = 10;
// Here x is 10
{
const x = 2;
// Here x is 2
}
// Here x is 10
Redeclarando
Redeclarar uma varvariável JavaScript é permitido em qualquer lugar em um programa:
Exemplo:
var x = 2; // Allowed
var x = 3; // Allowed
x = 4; // Allowed
Não é permitido redeclarar um existente var ou let variável para const, no mesmo escopo:
Exemplo:
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
}
Reatribuir uma const variável existente , no mesmo escopo, não é permitido:
Exemplo:
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
}
Redeclarar uma variável com const, em outro escopo, ou em outro bloco, é permitido:
Exemplo:
const x = 2; // Allowed
{
const x = 3; // Allowed
}
{
const x = 4; // Allowed
}
Const Hoisting
As variáveis definidas com varsão içadas para o topo e podem ser inicializadas a qualquer momento.
Significado: você pode usar a variável antes de ser declarada:
Exemplo:
carName = "Volvo";
var carName;
Se você quiser aprender mais sobre içamento, estude o capítulo içamento JavaScript.
Variáveis definidas com const também são içadas ao topo, mas não inicializadas.
Significado: Usar uma const variável antes de ser declarada resultará em ReferenceError:
Exemplo:
alert (carName);
const carName = "Volvo";
Fonte: w3schools