Respostas

Respostas dos exercícios de fixação

// Exercício 1
const nome = "Lucas";
const cidade = "São Paulo";
let idade = 25;

console.log(`Olá, meu nome é ${nome}, tenho ${idade} anos e moro em ${cidade}.`);
// Exercício 2 (corrigido)
let nome1 = "Carlos";

// variáveis não podem começar com número
// Exercício 3
const anoAtual = 2025;
let anoNascimento = 2000;
let idade = anoAtual - anoNascimento;

console.log(`Olá! Você tem ${idade} anos.`);
// Exercício 4
let resultado = "10" + 5;
console.log(resultado); // "105"

// Corrigido:
let numero = Number("10");
let resultadoCorreto = numero + 5;
console.log(resultadoCorreto); // 15
// Exercício 5
let mensagem = "Hoje é um ótimo dia para aprender " + "JavaScript!";
console.log(mensagem);

let mensagem2 = `Hoje é um ótimo dia para aprender JavaScript!`;
console.log(mensagem2);
// Exercício 6
let frase = `Olá!
Estou aprendendo JavaScript.`;
console.log(frase);
// Exercício 7
let nome = "João";
let idade = 20;
let estudante = true;

console.log(typeof nome);      // string
console.log(typeof idade);     // number
console.log(typeof estudante); // boolean
// Exercício 8
let x;
let y = null;

console.log(typeof x); // undefined
console.log(typeof y); // object (comportamento histórico do JS)
// Exercício 9
let preco = "50";
console.log(preco * 2); // 100, coerção implícita

// Forma correta:
preco = Number(preco); // garante o tipo correto
console.log(preco * 2);

// mesmo que o preco seja uma string, o operador * obriga o JavaScript a converter "50" em número. Isso se chama coerção implícita
// Exercício 10 (má prática)
let idade = 30;
idade = "trinta"; // Evitar isso!

// Correto seria manter o mesmo tipo:
let idadeCorreta = 30;

// é criada uma variável do tipo Number e depois mudada para String. O JavaScript permite isso, porque é fracamente tipado, mas pode gerar erros!
// Exercício 11
var nome = "Ana";
if (true) {
  var nome = "Carlos";
}
console.log(nome); // Carlos

// Correção com let:
if (true) {
  let nome2 = "Carlos";
}
// console.log(nome2); // Erro

// o var ignora o escopo do bloco (if), então ele sobrescreve a variável nome
// Exercício 12
// Verifica se a pessoa pode dirigir com base na idade
let idade = 21;
if (idade >= 18) {
  console.log("Pode dirigir");
}
// Exercício 13
/*
  Template literals permitem escrever textos
  com variáveis e quebras de linha de forma mais simples.
*/
let nome = "Lucas";
let saudacao = `Olá, ${nome}!
Tudo bem com você?`;
console.log(saudacao);

// a crase (`) permite que a String tenha múltiplas linhas e variáveis interpoladas (${}) de forma muito mais legível
// Exercício 14
let a = 10;
let b = a; // Cópia de valor
b = 20;
console.log(a); // 10

let obj1 = { nome: "Ana" };
let obj2 = obj1; // Cópia de referência
obj2.nome = "Carlos";
console.log(obj1.nome); // Carlos
// Exercício 15
let a = [1, 2, 3];
let b = [...a]; // Cópia com spread
b.push(4);
console.log(a); // [1, 2, 3]
console.log(b); // [1, 2, 3, 4]
// Exercício 16
let usuario = { nome: "Maria", idade: 22 };
let novoUsuario = { ...usuario };
novoUsuario.nome = "Lúcia";

console.log(usuario.nome);      // Maria
console.log(novoUsuario.nome);  // Lúcia
// Exercício 17
let x = 5;
let y = 5;
console.log(x === y); // true

let obj1 = { nome: "Ana" };
let obj2 = { nome: "Ana" };
console.log(obj1 === obj2); // false
// Exercício 18
let texto = "javascript";
console.log(texto.toUpperCase()); // "JAVASCRIPT"
// O JS cria um objeto String temporariamente (boxing automático)
// Exercício 19
for (var i = 0; i < 3; i++) {
  setTimeout(() => console.log("var:", i), 100);
}
// var: 3, var: 3, var: 3

for (let j = 0; j < 3; j++) {
  setTimeout(() => console.log("let:", j), 100);
}
// let: 0, let: 1, let: 2

// o var não tem escopo de bloco, então a variável i é compartilhada por todas as funções dentro do loop. Quando o setTimeout roda, o loop já terminou - e i vale 3.
// por isso o console imprime:
// 
// var:3
// var:3
// var:3

// o let tem escopo de bloco, ou seja, uma nova variável j é criada a cada repetição do for.
// cada função no setTimeout "lembra" o valor certo de j.
// por isso o resultado é:
// 
// let:0
// let:1
// let:2
// Exercício 20
// Pergunta ao usuário e calcula idade (usar em navegador com prompt/alert)
const anoAtual = 2025; // define o ano atual
let nome = prompt("Qual seu nome?"); // input do nome
let nascimento = Number(prompt("Qual seu ano de nascimento?")); // input da data de nascimento
let idade = anoAtual - nascimento; // calcula a idade

alert(`Olá, ${nome}! Você tem ${idade} anos.`); // exibe a mensagem

Last updated