Esta tradução está incompleta. Por favor, ajude a traduzir este artigo.

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.

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. 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, os parâmetros desse objeto poderão ser alterados, por exemplo.

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;

// retorna 7
console.log("my favorite number is: " + MY_FAV);

// tentar redeclarar a constante emite um erro 
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 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 como 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)
myObject = {"otherKey": "value"};

// Entretanto, atributos de objetos não estão protegidos,
// logo a seguinte instrução é executada sem problemas 
myObject.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.

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 950547 and bug 611388.

  • 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: SphinxKnight,