Se você quer trabalhar com desenvolvimento web — seja criando sites, aplicações, sistemas ou até servidores — o JavaScript é inevitável. Ele é a única linguagem que roda nativamente nos navegadores, e hoje também roda no servidor, em aplicativos mobile, em IoT, e muito mais.
Neste artigo inaugural da nossa série, vou te apresentar o JavaScript do zero, com calma e sem atalhos. Em um ano, você vai dominar desde o básico até frameworks modernos como React e Node.js. Mas todo grande edifício começa pela fundação.
O que é JavaScript?
JavaScript é uma linguagem de programação interpretada, dinâmica e orientada a eventos, criada em 1995 por Brendan Eich em apenas 10 dias. Apesar da origem apressada, ela se tornou a linguagem mais popular do mundo por décadas seguidas.
Ela foi criada para dar vida às páginas HTML — que sozinhas são estáticas, como um documento de texto. Com JavaScript, você consegue reagir a cliques, validar formulários, buscar dados de uma API, animar elementos, e muito mais.
Onde o JavaScript roda?
No navegador (front-end): Todo browser moderno — Chrome, Firefox, Safari, Edge — possui um motor JavaScript embutido. O do Chrome se chama V8, e é extremamente poderoso.
No servidor (back-end): Graças ao Node.js, criado em 2009, o JavaScript saiu do navegador e passou a rodar também no servidor. Hoje você pode escrever toda a sua aplicação — do banco de dados à interface — em JavaScript.
Seu primeiro código
Abra o navegador, pressione F12 para abrir o DevTools, clique na aba Console e digite:
console.log("Olá, mundo!");
Pronto. Você acabou de executar seu primeiro programa JavaScript. O console.log() é o comando mais básico para exibir informações — ele vai ser seu melhor amigo nos próximos meses.
Variáveis: guardando informações
Em JavaScript moderno, usamos let e const para declarar variáveis. Esqueça o var por enquanto — ele existe, mas tem comportamentos problemáticos que vamos estudar no futuro.
// const: valor que não vai mudar
const nome = "Ana";
// let: valor que pode mudar
let idade = 25;
console.log(nome); // Ana
console.log(idade); // 25
idade = 26; // isso funciona com let
console.log(idade); // 26
// nome = "Maria"; // ERRO! const não pode ser reatribuída
Regra prática: use const por padrão. Só use let quando souber que o valor vai mudar.
Tipos de dados básicos
JavaScript possui alguns tipos primitivos essenciais:
// String (texto)
const saudacao = "Bem-vindo ao curso!";
// Number (número — inteiro ou decimal)
const preco = 49.90;
const ano = 2025;
// Boolean (verdadeiro ou falso)
const estaLogado = true;
const temDesconto = false;
// Null (ausência intencional de valor)
const endereco = null;
// Undefined (variável declarada sem valor)
let profissao;
console.log(profissao); // undefined
Não se preocupe em memorizar tudo agora. Vamos usar cada tipo exaustivamente nos próximos artigos.
Operadores básicos
const a = 10;
const b = 3;
console.log(a + b); // 13 — soma
console.log(a - b); // 7 — subtração
console.log(a * b); // 30 — multiplicação
console.log(a / b); // 3.333... — divisão
console.log(a % b); // 1 — resto da divisão (módulo)
console.log(a ** b); // 1000 — potência (10³)
Concatenando textos com Template Literals
Uma das formas mais modernas e limpas de trabalhar com texto:
const nome = "Carlos";
const idade = 30;
// Jeito antigo (evite):
console.log("Meu nome é " + nome + " e tenho " + idade + " anos.");
// Jeito moderno com template literal (use sempre):
console.log(`Meu nome é ${nome} e tenho ${idade} anos.`);
Note as crases ` em vez de aspas, e o ${} para inserir variáveis dentro do texto. Limpo, legível, elegante.
Comentários no código
Código bem comentado é código respeitoso — com seus colegas e com você mesmo do futuro:
// Isso é um comentário de linha única
/*
Isso é um comentário
de múltiplas linhas.
Útil para explicações mais longas.
*/
const taxa = 0.1; // 10% de juros ao mês
Tarefa para você
Abra o console do navegador e tente o seguinte:
- Crie uma
constcom seu nome - Crie um
letcom seu ano de nascimento - Calcule sua idade subtraindo o ano atual
- Exiba uma frase completa usando template literal
const meuNome = "???";
let anoNascimento = ???;
const anoAtual = 2025;
const minhaIdade = anoAtual - anoNascimento;
console.log(`Olá! Meu nome é ${meuNome} e tenho ${minhaIdade} anos.`);
Ver solução — os quatro passos, e a idade que só muda no aniversário
// ---------------------------------------------------------------
// 1 a 4 — o esqueleto do exercício, preenchido
// ---------------------------------------------------------------
const meuNome = "Ana Prado";
let anoNascimento = 1998;
// getFullYear() em vez de 2025 fixo: o ano vem do relógio da máquina,
// então a conta não vence virando o ano.
const anoAtual = new Date().getFullYear();
const minhaIdade = anoAtual - anoNascimento;
console.log(`Olá! Meu nome é ${meuNome} e tenho ${minhaIdade} anos.`);
// ---------------------------------------------------------------
// Por que const no nome e let no ano
// ---------------------------------------------------------------
anoNascimento = 1999; // let aceita: a variável pode ser reatribuída
// meuNome = "Outro"; // const recusa: TypeError: Assignment to constant variable.
// ---------------------------------------------------------------
// A conta acima está errada em metade do ano
// ---------------------------------------------------------------
// Subtrair só os anos dá a idade que a pessoa VAI fazer. Quem nasceu em
// dezembro passa onze meses "mais velho" do que é. A idade de verdade
// depende de o aniversário já ter passado ou não.
function calcularIdade(dataNascimento) {
const hoje = new Date();
let idade = hoje.getFullYear() - dataNascimento.getFullYear();
// Meses em JavaScript são 0-based: janeiro é 0, dezembro é 11.
const mes = hoje.getMonth() - dataNascimento.getMonth();
const aindaNaoFezAniversario =
mes < 0 || (mes === 0 && hoje.getDate() < dataNascimento.getDate());
if (aindaNaoFezAniversario) {
idade = idade - 1;
}
return idade;
}
const nascimento = new Date(1998, 11, 25); // 25/12/1998 — mês 11 é dezembro
console.log(`Idade exata: ${calcularIdade(nascimento)} anos.`);
// ---------------------------------------------------------------
// Tipos e template literal
// ---------------------------------------------------------------
console.log(typeof meuNome); // "string"
console.log(typeof minhaIdade); // "number"
console.log(typeof nascimento); // "object" — Date não é um tipo primitivo
// Template literal aceita expressão inteira, não só variável:
console.log(`No ano que vem eu faço ${calcularIdade(nascimento) + 1}.`);
Duas armadilhas num exercício de três linhas: getMonth() devolve 0 a 11 (dezembro é 11, não 12), e subtrair anos não dá idade — dá idade a partir do aniversário. A segunda é clássica em cadastro que valida maioridade.
Com const, let, os tipos primitivos e o template literal você já tem o suficiente para escrever algo que funcione — e para errar de maneiras interessantes, que é como se aprende linguagem. O console do navegador continua sendo o melhor lugar para isso: nada a instalar, resposta imediata e nenhuma consequência. Tudo o que vem adiante é construído sobre esse punhado de peças.
Fontes e Referências
- MDN Web Docs — Guia de JavaScript: https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Guide
- MDN Web Docs — Primeiros passos com JavaScript: https://developer.mozilla.org/pt-BR/docs/Learn/JavaScript/First_steps
- MDN Web Docs — Tipos de dados e estruturas: https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Data_structures
- JavaScript.info — Variáveis: https://javascript.info/variables
- JavaScript.info — Tipos de dados: https://javascript.info/types
- TC39 — a especificação da linguagem: https://tc39.es/ecma262/
- Eloquent JavaScript — Marijn Haverbeke, livro completo e gratuito: https://eloquentjavascript.net/
- You Don't Know JS Yet — Kyle Simpson: https://github.com/getify/You-Dont-Know-JS
- Can I use — suporte dos navegadores a cada recurso: https://caniuse.com/
Exercícios
Exercício 1
Rode o trecho abaixo no console e anote as três saídas exatas, com todos os dígitos que aparecerem.
const a = 10;
const b = 3;
console.log(a % b);
console.log(a ** b);
console.log(a / b);
Ver resposta
✓ Resposta: 1, 1000 e 3.3333333333333335. As duas primeiras não surpreendem: o resto de 10 por 3 é 1, e 10³ é 1000. A terceira é a que importa: aparece um 5 no último dígito. Números em JavaScript são de ponto flutuante, e 10/3 não tem representação exata em binário — o valor impresso é o mais próximo que cabe. Guarde isso: é a razão de 0.1 + 0.2 não dar exatamente 0.3.
Exercício 2
O que cada uma das duas últimas linhas produz? Se alguma delas gera erro, escreva a mensagem exata.
const nome = "Ana";
let profissao;
console.log(profissao);
nome = "Maria";
Ver resposta
✓ Resposta: A primeira imprime undefined — let profissao; declara sem atribuir, e o valor de uma variável declarada e não inicializada é undefined. A segunda lança TypeError: Assignment to constant variable. e interrompe a execução. Repare que o erro é na reatribuição, não na declaração: const proíbe apontar o nome para outro valor.
Exercício 3
Reescreva a linha abaixo usando template literal. Depois responda: o que imprime console.log(`Daqui a um ano: ${idade + 1}`)?
const nome = "Carlos";
const idade = 30;
console.log("Meu nome é " + nome + " e tenho " + idade + " anos.");
Ver resposta
✓ Resposta: A reescrita é console.log(`Meu nome é ${nome} e tenho ${idade} anos.`); — com crases, não aspas. A segunda linha imprime Daqui a um ano: 31: dentro de ${} cabe uma expressão inteira, não apenas o nome de uma variável. É por isso que o template literal substitui a concatenação com vantagem — some o vaivém de aspas e sinais de mais, e o texto final fica legível na própria linha.
Exercício 4
O artigo apresenta null e undefined lado a lado. Qual é a diferença entre os dois, e qual dos dois você escreve no seu próprio código?
Ver resposta
✓ Resposta: undefined é a ausência que a linguagem produz: uma variável declarada sem valor, um parâmetro que não foi passado, uma propriedade que não existe. null é a ausência que você declara — "aqui não há endereço, e isso é intencional". Na prática: undefined você encontra, null você escreve. É a diferença entre "ninguém preencheu" e "eu decidi que está vazio".
Exercício 5
Explique, com o que o artigo apresentou, por que o JavaScript é a única linguagem que você não pode simplesmente trocar por outra ao trabalhar no navegador — e o que mudou em 2009.
Ver resposta
✓ Resposta: Porque é a única que os navegadores executam nativamente: cada um traz um motor embutido (o do Chrome é o V8), e não há como pedir a eles que rodem outra coisa — o que existe hoje são linguagens que se convertem em JavaScript antes de chegar ao navegador. Em 2009, o Node.js pegou o V8 e o colocou para rodar fora do navegador, no servidor: a partir dali a mesma linguagem passou a servir das telas ao back-end, que é o que torna possível a série inteira ir do console ao React sem trocar de linguagem no caminho.