T13 — 034.2 Estruturas de dados em JavaScript
Resumo Conciso
Constantes e variáveis
O JavaScript é uma linguagem de tipagem dinâmica — o tipo de dado é inferido automaticamente a partir do valor atribuído.
| Palavra-chave | Escopo | Mutável | Descrição |
|---|---|---|---|
const | Bloco | Não | Valor atribuído uma única vez; tentativa de reatribuição gera TypeError |
let | Bloco | Sim | Variável com escopo restrito ao bloco {} em que é declarada |
var | Função (não bloco) | Sim | Variável com escopo de função; acessível fora de blocos if/for |
Regra de nomenclatura: O nome deve começar com uma letra ou sublinhado (_).
const update_interval = 10;let variable = true;var message = "Global";Escopo de variáveis
- Variáveis declaradas fora de funções ou blocos têm escopo global.
- Variáveis com
leteconsttêm escopo de bloco (restrito a{}). - Variáveis com
varnão têm escopo de bloco — são acessíveis fora do bloco em que foram declaradas.
var value = "Global";{ value = "Location"; }console.log(value); // "Location"Tipos primitivos
| Tipo | Exemplo | Descrição |
|---|---|---|
undefined | Variável não declarada/sem valor | Valor por omissão de variáveis não inicializadas |
boolean | true, false | Valores lógicos |
number | 3.14159, 42 | Inteiros e decimais |
string | "Text content" | Cadeias de caracteres |
symbol | Symbol() | Identificador único para atributos de objetos |
O operador typeof identifica o tipo de uma variável:
console.log(typeof true); // "boolean"console.log(typeof 3.14159); // "number"console.log(typeof "text"); // "string"Tipos estruturados
Arrays (Matrizes)
Coleção ordenada de valores entre colchetes. Pode conter tipos mistos.
let cart = ['Milk', 'Bread', 'Eggs'];console.log(cart.length); // 3cart.push('Candy'); // Adiciona elementocart.pop(); // Remove o último elementoconsole.log(cart[0]); // "Milk" (índice começa em 0)Objetos
Pares de propriedade/valor delimitados por chaves {}. Cada propriedade é acessível por variavel.propriedade.
let item = { name: 'Milk', quantity: 1, price: 4.99 };console.log(item.name); // "Milk"console.log(item.quantity); // 1Arrays de objetos
let cart = [ { name: 'Milk', quantity: 1 }, { name: 'Bread', quantity: 4 }];cart.push({ name: 'Eggs', quantity: 12 });console.log(cart[2].name + " quantity: " + cart[2].quantity); // "Eggs quantity: 12"Operadores
Aritméticos
| Operador | Descrição | Exemplo abreviado |
|---|---|---|
+ | Adição / concatenação | a += b |
- | Subtração | a -= b |
* | Multiplicação | a *= b |
/ | Divisão | a /= b |
% | Módulo (resto da divisão) | — |
++ | Incremento de 1 | a++ equivale a a = a + 1 |
-- | Decremento de 1 | a-- equivale a a = a - 1 |
Precedência: Multiplicação/divisão antes de adição/subtração. Usar parênteses para alterar a ordem.
let total = item.quantity * 9.99 + 3.15;Coerção e conversão de tipo
- Quando um dos operandos de
+é uma string, os outros são convertidos para string (concatenação). - Usar
Number()para converter explicitamente uma string numérica para número.
sum = Number(value1) + value2;NaN(Not a Number) é retornado quando uma operação numérica recebe um operando inválido (ex.: multiplicar por uma string).nullindica uma variável sem valor atribuído.
🧭 Exercícios Guiados (resolvidos)
Exercício Guiado 1 — Tipos em arrays
Enunciado: Um array é uma estrutura de dados presente em várias linguagens de programação, das quais algumas permitem apenas arrays com itens do mesmo tipo. No caso do JavaScript, é possível definir uma matriz com itens de tipos diferentes?
Solução passo a passo:
- Sim, JavaScript permite arrays com tipos mistos.
- Os valores podem ser strings, números, booleans, ou até outros objetos/arrays.
let mixed = ['text', 42, true, null];console.log(typeof mixed[0]); // "string"console.log(typeof mixed[1]); // "number"Exercício Guiado 2 — Adicionar propriedade a um objeto
Enunciado: Com base no exemplo let item = { name: 'Milk', quantity: 1 } para um objeto em uma lista de compras, como esse objeto poderia ser declarado de forma a incluir o preço do item?
Solução passo a passo:
- Adicionar uma nova propriedade
priceao objeto na sua declaração inicial.
let item = { name: 'Milk', quantity: 1, price: 4.99 };Exercício Guiado 3 — Atualizar valor para metade
Enunciado: Em uma única linha de código, quais são as maneiras de atualizar o valor de uma variável para a metade de seu valor atual?
Solução passo a passo:
- Usar a própria variável como operando com
/. - Usar o operador abreviado
/=.
value = value / 2; // Forma explícitavalue /= 2; // Forma abreviadaExercício Guiado 4 — Converter string para número
Enunciado: Dada a string "42", como convertê-la para o tipo número e somá-la com o número 8?
Solução passo a passo:
- Usar
Number()para converter a string numérica para número. - Realizar a soma normalmente.
let str = "42";let result = Number(str) + 8;console.log(result); // 50🔬 Exercícios Exploratórios (prática no terminal)
-
Enunciado: No código a seguir, qual valor será exibido na saída do console?
var value = "Global";{ value = "Location"; }console.log(value);
LocationExplicação: A variável value foi declarada com var (escopo de função/global). O bloco {} não restringe o acesso. Dentro do bloco, o valor é alterado para "Location", e essa alteração persiste fora do bloco.
- Enunciado: O que acontece quando um ou mais operandos envolvidos em uma operação de multiplicação é uma string?
console.log(5 * "3"); // 15 (conversão automática) console.log(5 * "abc"); // NaN (Not a Number)Explicação: O JavaScript tenta converter a string para número. Se a conversão for bem-sucedida (ex.: "3" → 3), a operação é realizada. Caso contrário, o resultado é NaN.
- Enunciado: Como é possível remover o item Eggs da matriz
cartdeclarada comlet cart = ['Milk', 'Bread', 'Eggs']?
let cart = ['Milk', 'Bread', 'Eggs']; cart.pop(); console.log(cart); // ['Milk', 'Bread']Explicação: O método pop() remove o último elemento da matriz. Como Eggs está no índice 2 (último), cart.pop() remove-o. Para remover um elemento específico pelo índice, usar cart.splice(2, 1).
- Enunciado: Qual é a diferença entre acessar um elemento de um array pela notação de colchetes e pela notação de pontos?
let arr = [10, 20, 30]; console.log(arr[1]); // 20 let obj = { name: "Milk", quantity: 1 }; console.log(obj.name); // "Milk"Explicação: A notação de colchetes [] é usada para arrays (índices numéricos) e também para propriedades de objetos com nomes dinâmicos. A notação de pontos . é usada para propriedades de objetos com nomes estáticos. Arrays não suportam notação de pontos (ex.: arr.1 é inválido).