Houve alguns erros de script nesta página. Enquanto estes erros são encaminhados para os editores do site, você pode ver o conteúdo parcial abaixo.

Tradução em progresso.

Resumo

declaração const cria uma variável cujo o valor é fixo, ou seja, uma constante somente leitura. Isso não significa que o valor é imutável, apenas que a variável constante não pode ser alterada ou retribuída.

Sintaxe

const name1 = value1 [, name2 = value2 [, ... [, nameN = valueN]]]];
nameN
Nome da constante. Pode ser qualquer identificador válido.
valueN
Valor atribuido a constante. Pode ser qualquer expressão válida, incluindo uma função.

Descrição

Esta declaração cria uma constante que pode pertencer tanto ao escopo global (na janela ou objeto) quanto ao local do bloco em que é declarada. Constantes globais não se tornam propriedades do objeto window, diferente da criação de variáveis com var. Toda constante requer um inicializador, ou seja, é preciso especificar um valor para a constante no momento em que ela é declarada (o que faz sentido, uma vez que esse valor não pode ser alterado).

A declaração const cria uma referência somente leitura a um valor. Isso não significa que esse valor é imutável, apenas que o identificador da variável constante não pode ser alterado. Se o conteúdo do identificador for um objeto, isso significa que o conteúdo do objeto (ex. seus parâmetros) podem ser alterados.

Todas as considerações de "temporal dead zone" se aplicam tanto a let quanto a const.

Uma constante não pode ter o mesmo nome que uma função ou variável que esteja no mesmo escopo.

Exemplos

O exemplo abaixo demonstra o comportamento de uma constante. Experimente executá-lo no console do seu navegador.

// NOTA: constantes podem ser declaradas em caixa alta ou baixa,
// mas uma convenção comum é usar apenas caixa alta

// define MY_FAV como uma constante e lhe atribui o valor 7
const MY_FAV = 7;

// isto falha mas não emite erros no Firefox e Chrome (porém não falha no Safari)
MY_FAV = 20;

// a variável MY_FAV possui o valor 7
console.log("my favorite number is: " + MY_FAV);

// tentar redeclarar a constante emite um erro - Uncaught SyntaxError: Identifier 'MY_FAV' has already been declared
const MY_FAV = 20;

// o nome MY_FAV está reservado para a constante acima, logo também irá falhar
var MY_FAV = 20; 

// isso também vai falhar
let MY_FAV = 20;

// É importante notar a natureza de escopo por bloco
if (MY_FAV === 7) {
    // não tem problema fazer isso, pois cria uma variável de bloco MY_FAV
    // com escopo local (o nome MY_FAV poderia ser usado com let também)
    let MY_FAV = 20;

    // MY_FAV agora é 20
    console.log("meu número favorito é " + MY_FAV);

    // isso retorna um erro, pois tenta registrar a variável no contexto global
    var MY_FAV = 20;
}

//MY_FAV ainda é 7
console.log('meu número favorito é ' + MY_FAV);

// const deve ser inicializada 
const FOO; // SyntaxError: missing = in const declaration

// const também funciona com objetos
const MY_OBJECT = {'key':'value'};

// Sobrescrever o objeto também falha (no Firefox e Chrome mas não no Safari) - Uncaught TypeError: Assignment to constant variable.
MY_OBJECT = {"OTHER_KEY": "value"};

// Entretanto, atributos de objetos não estão protegidos,
// logo a seguinte instrução é executada sem problemas 
MY_OBJECT.key = "otherValue"; // Utilize Object.freeze() se quiser tornar um objeto imutável 

// o mesmo se aplica para arrays
const MY_ARRAY = [];
// É possível utilizar push para incluir itens no array
MY_ARRAY.push('A'); //["A"]
// Todavia, atribuir um novo array para a variável gera um erro
MY_ARRAY = ['B'];

Especificações

Especificação Status Comentário
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Let and Const Declarations' in that specification.
Padrão Definição inicial.
ECMAScript Latest Draft (ECMA-262)
The definition of 'Let and Const Declarations' in that specification.
Rascunho Nenhuma mudança.

Compatibilidade nos navegadores

Estamos convertendo nossos dados de compatibilidade para o formato JSON. Esta tabela de compatibilidade ainda usa o formato antigo, pois ainda não convertemos os dados que ela contém. Descubra como você pode ajudar!

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support ? 36.0 (maybe earlier) IE11 12.00 (maybe earlier) 5.1.7 (maybe earlier)

Reassignment fails

20 13 (13) IE11 ? ?
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support ? ? ? ? ? ?
Reassignment fails ? ? ? ? ? ?

Observações

Em versões anteriores do Firefox & Chrome e a partir de Safari 5.1.7 e Opera 12.00, se você define uma variável com const, você ainda consegue alterar o valor depois. Este recurso não é suportado no Internet Explorer 6-10, mas está incluído no Internet Explorer 11.

Observações específicas para Firefox

 A declaração const foi implementada no Firefox muito antes de const aparecer na especificação ECMAScript 6. For const ES6 compliance see {{ bug }} and {{ bug }}.

  • Iniciando com o Gecko 36 (Firefox 36 / Thunderbird 36 / SeaMonkey 2.33):
    • {const a=1};a passa a retornar ReferenceError e não retorna 1 devido block-scoping.
    • const a; passa a retornar SyntaxError ("missing = in const declaration"): É necessário incializar a constante.
    • const a = 1; a = 2; passa a retornar SyntaxError ("invalid assignment to const a").

Veja também

Etiquetas do documento e colaboradores

Última atualização por: panoramix360,