--- title: const slug: Web/JavaScript/Reference/Statements/const tags: - ECMAScript6 - ES6 - JavaScript - Referencia - constantes translation_of: Web/JavaScript/Reference/Statements/const ---
Constantes possuem escopo de bloco, semelhantes às variáveis declaradas usando o palavra-chave let. O valor de uma constante não pode ser alterado por uma atribuição, e ela não pod ser redeclarada.
A 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.
const name1 = value1 [, name2 = value2 [, ... [, nameN = valueN]]]];
nameNvalueNEsta 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.
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ção | Status | Comentário |
|---|---|---|
| {{SpecName('ES6', '#sec-let-and-const-declarations', 'Let and Const Declarations')}} | {{Spec2('ES6')}} | Nenhuma mudança. |
| {{SpecName('ESDraft', '#sec-let-and-const-declarations', 'Let and Const Declarations')}} | {{Spec2('ESDraft')}} | Definição inicial. |
| Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Basic support | {{CompatUnknown}} | 36.0 (maybe earlier) | IE11 | 12.00 (maybe earlier) | 5.1.7 (maybe earlier) |
|
Reassignment fails |
{{ CompatChrome(20) }} | {{ CompatGeckoDesktop(13) }} | IE11 | {{CompatUnknown}} | {{CompatUnknown}} |
| Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| Basic support | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
| Reassignment fails | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
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.
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)}}.
{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").