blob: cc5a4733a44ae0cb54b918f111b9639637fc4b3d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
---
title: 'TypeError: atribuição inválida para const "x"'
slug: Web/JavaScript/Reference/Errors/Invalid_const_assignment
tags:
- Erro
- JavaScript
- TypeError
translation_of: Web/JavaScript/Reference/Errors/Invalid_const_assignment
---
<div>{{jsSidebar("Errors")}}</div>
<h2 id="Mensagem">Mensagem</h2>
<pre class="syntaxbox">TypeError: invalid assignment to const "x" (Firefox)
TypeError: Assignment to constant variable. (Chrome)
TypeError: Assignment to const (Edge)
TypeError: Redeclaration of const 'x' (IE)
</pre>
<h2 id="Tipo_de_erro">Tipo de erro</h2>
<p>{{jsxref("TypeError")}}</p>
<h2 id="O_que_deu_errado">O que deu errado?</h2>
<p>Uma constante é um valor que não pode ser alterado pelo programa durante a execução normal. Ele não pode mudar através de reatribuição e não pode ser redeclarado. Em JavaScript, as constantes são declaradas usando a palavra-chave <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/const">const</a></code>.</p>
<h2 id="Exemplos">Exemplos</h2>
<h3 id="Redeclaração_inválida">Redeclaração inválida</h3>
<p>Atribuir um valor ao mesmo nome de constante no mesmo escopo de bloco lançará o erro.</p>
<pre class="brush: js example-bad">const COLUNAS = 80;
// ...
COLUNAS = 120; // TypeError: invalid assignment to const `COLUNAS'</pre>
<h3 id="Corrigindo_o_erro">Corrigindo o erro</h3>
<p>Existem várias opções para corrigir esse erro. Verifique o que se pretendia alcançar com a constante em questão.</p>
<h4 id="Renomear">Renomear</h4>
<p>Se você quis declarar outra constante, escolha outro nome e renomeie. Esse nome de constante já está sendo usado nesse escopo.</p>
<pre class="brush: js example-good">const COLUNAS = 80;
const COLUNAS_LARGAS = 120;</pre>
<h4 id="const_let_ou_var"><code>const</code>, <code>let</code> ou <code>var</code>?</h4>
<p>Não use const se você não quis declarar uma constante. Talvez você quisesse declarar uma variável com escopo de bloco com <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/let">let</a></code> ou uma variável global com <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/var">var</a></code>.</p>
<pre class="brush: js example-good">let colunas = 80;
// ...
let colunas = 120;
</pre>
<h4 id="Escopo">Escopo</h4>
<p>Verifique se você está no escopo correto. Essa constante deve aparecer nesse escopo ou deveria aparecer em uma função, por exemplo?</p>
<pre class="brush: js example-good">const COLUNAS = 80;
function configurarAmbienteTelaGrande() {
const COLUNAS = 120;
}</pre>
<h3 id="const_e_imutabilidade"><code>const</code> e imutabilidade</h3>
<p>A declaração <code>const</code> cria uma referência somente leitura para um valor. Isso <strong>não significa</strong> que o valor que ela contém é imutável, apenas que o identificador da variável não pode ser reatribuído. Por exemplo, caso o conteúdo seja um objeto, isso significa que o objeto em si ainda pode ser alterado. Isso significa que você não pode alterar o valor armazenado em uma variável:</p>
<pre class="brush: js example-bad">const obj = {foo: 'bar'};
obj = {foo: 'baz'}; // TypeError: invalid assignment to const `obj'
</pre>
<p>Mas você pode alterar as propriedades em uma variável:</p>
<pre class="brush: js example-good">obj.foo = 'baz';
obj; // Object { foo: "baz" }</pre>
<h2 id="Veja_também">Veja também</h2>
<ul>
<li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/const">const</a></code></li>
<li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/let">let</a></code></li>
<li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/var">var</a></code></li>
</ul>
|