Const JavaScript
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 Escopo do Bloco.
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 variáveis JavaScript const
devem receber um valor quando são declaradas:
Correto
const PI = 3.14159265359;
Incorreta
const PI;
PI = 3.14159265359;
Quando usar JavaScript const?
Como regra geral, sempre declare uma variável com const
a menos que você saiba que o valor será alterado.
Use const
quando você declarar:
- Uma nova matriz
- Um novo objeto
- Uma nova função
- Um novo RegExp
Objetos e matrizes constantes
A palavra-chave const
é um pouco enganosa.
Não define um valor constante. Ele define uma referência constante a um valor.
Por isso você NÃO pode:
- Reatribuir um valor constante
- Reatribuir uma matriz constante
- Reatribuir um objeto constante
- Altere os elementos da matriz constante
- Alterar as propriedades do objeto constante
Mas você pode:
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 ao navegador
A const
palavra-chave não tem suporte no 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 que 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
Você pode aprender mais sobre o escopo do bloco no capítulo Escopo do JavaScript .
Redeclarando
Redeclarar uma var
variável JavaScript é permitido em qualquer lugar em um programa:
Exemplo
var x = 2; // Allowed
var x = 3; // Allowed
x = 4; // Allowed
Redeclarar uma
variável var
ou existente para , no mesmo escopo, não é permitido:let
const
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
}
Não é permitido reatribuir uma const
variável existente, no mesmo escopo:
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 Içamento
As variáveis definidas com var
sã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
Isso está bem:
carName = "Volvo";
var carName;
Se você quiser aprender mais sobre içamento, estude o capítulo JavaScript Içamento .
As variáveis definidas com const
também são içadas para o topo, mas não inicializadas.
Significado: Usar uma const
variável antes de ser declarada resultará em
ReferenceError
:
Exemplo
alert (carName);
const carName = "Volvo";