Guia completo
JavaScript: o guia completo para aprender do zero
O que é JavaScript, para que serve, em que ordem estudar cada assunto e onde quase todo iniciante trava — por quem ensinou milhares de alunos a linguagem.
JavaScript é a linguagem que roda dentro do navegador. Foi criada em 1995 para fazer pequenas interações numa página — validar um formulário, trocar uma imagem — e hoje é a única linguagem que todo navegador do mundo executa nativamente. Se alguma coisa acontece numa página sem recarregar, é JavaScript.
Nas três décadas seguintes ela saiu do navegador. Com o Node.js virou linguagem de servidor; com React Native e Electron, de aplicativo de celular e de desktop. Por isso ela permite atravessar várias partes de um produto sem trocar de sintaxe: tela, servidor, automação e acesso ao banco na mesma aplicação.
Este guia é o mapa. Ele diz o que estudar, em que ordem e onde as peças costumam se misturar. A sequência existe para reduzir carga mental, não para fingir que todo mundo aprende no mesmo ritmo.
O JavaScript trabalha sobre dados e APIs oferecidas pelo ambiente. Em palavras simples, a linguagem calcula e decide; o navegador ou o Node fornece recursos como DOM, rede, arquivo e temporizador. Separar essas duas camadas ajuda você a entender onde cada função realmente existe.
O atendente entre a página e os dados
Pense numa loja: as prateleiras e etiquetas já estão montadas, mas alguém ainda precisa reagir ao pedido, consultar o estoque e atualizar o total. O JavaScript cumpre esse papel de coordenação. No navegador, ele conversa com a página e com APIs web; no Node, conversa com servidor, arquivos e processos. A sintaxe da linguagem permanece, enquanto o conjunto de APIs muda.
No primeiro exercício, classifique cada nome usado como “linguagem” ou “API do ambiente” antes de rodar. Depois execute o mesmo raciocínio no console do navegador e no Node. Quando um nome existir em um lugar e não no outro, você terá verificado a fronteira entre JavaScript e ambiente.
Três coisas, essencialmente: reage a eventos, transforma dados e conversa com outros programas pela rede.
const nome = 'Ana';
const itens = 3;
const total = 479.7;
console.log(`Olá, ${nome}. Você tem ${itens} itens no carrinho, R$ ${total.toFixed(2)}.`);Transformar dados é o trabalho mais frequente do dia a dia. Uma lista chega de algum lugar; você filtra, ordena, soma e devolve outra forma dela:
const alunos = [
{ nome: 'Ana', nota: 8.5 },
{ nome: 'Bruno', nota: 6.0 },
{ nome: 'Carla', nota: 9.2 },
];
const aprovados = alunos.filter((a) => a.nota >= 7);
const media = alunos.reduce((s, a) => s + a.nota, 0) / alunos.length;
console.log(aprovados.map((a) => a.nome));
console.log('média da turma:', media.toFixed(2));E conversar com a rede — pedir dados a uma API e esperar a resposta chegar:
const resposta = await fetch('https://economia.awesomeapi.com.br/last/USD-BRL');
const dados = await resposta.json();
console.log(`1 dólar = R$ ${Number(dados.USDBRL.bid).toFixed(2)}`);
console.log('atualizado em:', dados.USDBRL.create_date);Rode você mesmo e o número vai ser outro — é uma cotação ao vivo. A saída acima é a que apareceu aqui quando este guia foi revisado.
Essas três capacidades explicam por que a linguagem serve tanto para a interface
quanto para o servidor. O que muda é o ambiente ao redor: no navegador existe
document e não existe sistema de arquivos; no Node é o contrário.
Por que aprender JavaScript primeiro
Existem linguagens com sintaxe mais limpa para começar. Ainda assim, para quem quer trabalhar com desenvolvimento web, JavaScript é uma primeira escolha prática por quatro razões concretas.
Retorno visual imediato. Você escreve três linhas, abre o navegador e vê a coisa acontecer na tela. Esse retorno liga cada linha a um efeito visível e ajuda a depurar sem depender apenas de teoria.
Não precisa instalar nada para começar. O interpretador já está no navegador
que você tem aberto agora. Pressione F12, vá em Console, escreva
2 + 2. Ambiente configurado.
Conecta as peças da web. A mesma base aparece no navegador, no Node, nos frameworks de interface e em muitos projetos que você vai precisar ler. Isso reduz a troca de contexto enquanto os fundamentos ainda estão se formando.
Cobre o projeto inteiro. Front-end, back-end com Node, aplicativo com React Native, script de automação. Você aprende uma sintaxe e circula por quatro mercados.
Para não deixar isso no abstrato, o ponto de partida muda conforme o objetivo:
| se o seu objetivo é | comece por | onde o JavaScript entra |
|---|---|---|
| site, loja, painel — qualquer coisa com tela no navegador | JavaScript | é o assunto inteiro |
| API, banco de dados, integração entre sistemas | JavaScript com Node | é o assunto inteiro, do outro lado |
| aplicativo de celular | JavaScript, e só então React Native | é a base do caminho mais curto |
| usar IA no dia a dia: agentes, automações, prompts | as ferramentas de IA direto | entra quando a automação virar produto com tela |
| jogo | não é aqui | JavaScript serve para jogo de navegador, e só |
A regra por trás da tabela: escolha a linguagem pelo lugar onde o resultado aparece, não pela linguagem que parece mais poderosa. Quem estuda a linguagem certa vê o próprio trabalho funcionando na primeira semana, e é isso que sustenta o segundo mês.
Onde rodar o código enquanto estuda
Você vai precisar de dois lugares, e nenhum deles exige instalar coisa alguma no primeiro dia.
O console do navegador. F12 (ou Cmd+Option+I no Mac), aba Console. É um
interpretador completo, com acesso à página aberta. Ótimo para testar uma linha,
péssimo para escrever trinta — não guarda o que você digitou.
Um arquivo .js com o Node. Instale o Node.js, salve um arquivo e rode
node arquivo.js no terminal. É o ambiente em que todos os exemplos deste blog
foram executados. Sem navegador, sem document: só a linguagem.
Quando a lógica já estiver de pé e você começar a mexer em página, o par
index.html + <script src="app.js" defer></script> resolve. O defer é
importante: sem ele, o script roda antes de a página existir, e você conhece a
primeira família de erro do front-end antes da hora.
O caminho de estudo, em ordem
Esta é a sequência que a trilha de JavaScript segue. Ela não é a ordem em que os assuntos aparecem na documentação; é a ordem em que eles param de doer.
1. Lógica antes de sintaxe
Se você nunca programou, não comece por JavaScript: comece por lógica de programação. Variável, condição, repetição e função existem em todas as linguagens, e são o que realmente é difícil. A sintaxe é decorável em uma semana; o raciocínio, não.
Quem pula esta etapa costuma travar no primeiro exercício que exige montar um laço dentro de outro — e conclui, erradamente, que não leva jeito.
2. Variáveis e tipos
Variáveis em JavaScript cobre var, let,
const, escopo de bloco e a zona morta temporal. Junto vêm os tipos primitivos:
string, number, boolean, null, undefined.
Onde as pessoas travam: na diferença entre null e undefined, e em achar que
const congela o conteúdo de um objeto. Não congela — o exemplo com o carrinho
está lá na lição.
3. Operadores e condicionais
if, else, ternário, switch. E a parte que gera bug de verdade: comparação.
== converte tipos antes de comparar, === não. Use === sempre, e você
elimina uma família inteira de problemas antes de conhecê-la.
Ao lado disso, entenda valores falsos: 0, '', null, undefined e
NaN são tratados como falso num if. É por isso que uma quantidade zero
válida às vezes some da tela.
4. Laços
for, while, for...of. Na prática moderna, for...of resolve quase tudo, e
os métodos de array resolvem o resto.
Onde as pessoas travam: em laço aninhado. Vale gastar um fim de semana só nisso, escrevendo tabuada, matriz e comparação de duas listas. Não tem atalho.
5. Funções
Funções em JavaScript é o divisor de águas da
trilha. Declaração, expressão, arrow function, parâmetro default, rest e o
this — assunto que vale estudar duas vezes, com um intervalo entre as leituras,
porque o contexto só fica concreto quando aparece dentro de métodos e callbacks.
Onde as pessoas travam: em achar que arrow function é só uma forma mais curta de
escrever function. Não é; ela trata o this de outro jeito, e a diferença só
aparece no dia em que o código quebra.
6. Arrays e objetos
Os dois tipos com que você vai passar 80% do tempo. Arrays: map, filter,
reduce, find, some, every. Objetos: acesso por ponto e por colchete,
desestruturação, spread.
Este é o momento em que o código começa a parecer profissional. Um for de sete
linhas vira um filter de uma.
7. DOM e eventos
Só agora o navegador entra de verdade. querySelector, addEventListener,
criar e remover elementos, ler valor de formulário.
Onde as pessoas travam: em rodar o script antes da página existir, o que produz
um null onde deveria haver um elemento — e em seguida um
TypeError: Cannot read properties of undefined
ou de null.
8. Assincronismo
setTimeout, Promise, async/await, fetch, tratamento de erro com
try/catch. Aqui a mentalidade muda: o código deixa de acontecer de cima para
baixo.
Onde as pessoas travam: em usar o resultado antes de ele existir. É o erro número um do JavaScript intermediário, e vale escrever à mão uma dúzia de chamadas a APIs públicas até que a ficha caia.
9. Módulos, erros e ferramentas
import/export, try/catch, throw, npm, e ler stack trace sem medo. Nesta
altura você já tem o que precisa para pegar código de outra pessoa e entender.
10. Um projeto que você não abandona
Uma lista de tarefas com armazenamento local, um consumidor de API pública, uma calculadora de frete. Escolha um, termine, publique. Um projeto terminado ensina mais que cinco começados, e é a única coisa que um recrutador consegue avaliar.
Sintaxe moderna que vale conhecer cedo
A linguagem recebe atualização anual. Três recursos mudam o dia a dia de quem está começando, e nenhum deles é avançado.
Template literals — interpolação com crase, em vez de concatenação com +.
Você já viu no primeiro exemplo deste guia.
Desestruturação e spread — extrair campos de um objeto ou array direto na declaração, e montar um objeto novo a partir de outro:
const pedido = {
id: 1042,
cliente: { nome: 'Ana Souza', uf: 'SP' },
itens: ['Teclado', 'Mouse'],
};
const { id, cliente: { nome, uf } } = pedido;
const [primeiro, ...resto] = pedido.itens;
const atualizado = { ...pedido, status: 'enviado' };
console.log(id, nome, uf);
console.log(primeiro, resto);
console.log(Object.keys(atualizado));O ...pedido copiou os campos existentes e status entrou por cima, num objeto
novo — o original ficou intacto. Esse padrão é onipresente em React e em
qualquer código que evite alterar dados no lugar.
Optional chaining e nullish coalescing — ?. e ??, que transformam três
linhas de verificação em uma. Estão explicados em detalhe no
artigo sobre o TypeError de undefined.
E, do lado da organização, classes com campos privados:
class Carrinho {
#itens = [];
adicionar(nome, preco) {
this.#itens.push({ nome, preco });
return this;
}
get total() {
return this.#itens.reduce((s, i) => s + i.preco, 0);
}
}
const carrinho = new Carrinho().adicionar('Teclado', 289.9).adicionar('Mouse', 149.9);
console.log(carrinho.total.toFixed(2));
console.log(carrinho.itens);carrinho.itens é undefined de propósito: o campo #itens é privado e não
existe fora da classe. Quem usa o carrinho só enxerga adicionar e total.
Os erros que você vai encontrar — e o que cada um diz
Boa parte do aprendizado é aprender a ler mensagem de erro. Cinco delas cobrem a esmagadora maioria dos primeiros meses, e cada uma tem um diagnóstico próprio.
SyntaxError — o código nem chegou a rodar. Quase sempre chave, parêntese ou
aspas sem fechar. O editor costuma marcar antes do navegador.
ReferenceError: x is not defined — o nome não existe em nenhum escopo
visível dali. Typo, ou você esqueceu de importar, ou declarou dentro de um bloco
e usou fora.
ReferenceError: Cannot access 'x' before initialization — o nome existe,
mas você chegou antes da linha que o define. É a zona morta temporal do let e
do const, explicada em
variáveis em JavaScript.
TypeError: x is not a function — o valor existe e não é chamável. Método
com nome errado, ou variável que ainda vale undefined. Está detalhado em
funções em JavaScript.
TypeError: Cannot read properties of undefined — o campeão absoluto. Você
usou ponto em cima do nada. As quatro causas e as correções de cada uma estão em
um artigo só sobre esse erro.
Repare no padrão: SyntaxError é escrita, ReferenceError é nome, TypeError é
valor. Saber em qual das três famílias você caiu já corta o problema pela
metade, antes de qualquer busca.
Onde as pessoas realmente travam
Depois de milhares de alunos, os pontos de parada se repetem com uma regularidade quase entediante. São cinco.
Laço aninhado. O primeiro obstáculo de verdade. Quem passa dele passa do resto.
this. O segundo. Não tente entender de uma vez; entenda o suficiente para
usar, e volte depois.
Assincronismo. O terceiro, e o que mais dura. A dificuldade não é a sintaxe
do await — é aceitar que o programa não espera.
Tutorial infinito. O quarto não é técnico. É assistir a aula atrás de aula sem escrever código. A sensação de progresso é real e o progresso não é. Se você não fechou o vídeo para tentar sozinho e errar, você não estudou.
Medo de mensagem de erro. O quinto, e o mais caro. A mensagem de erro é a melhor documentação que existe: ela diz o arquivo, a linha, a coluna e o que o motor esperava encontrar. Ler o erro inteiro, em voz alta se precisar, resolve mais rápido do que qualquer busca.
Como estudar sem se enganar
O maior risco do estudo autodidata não é escolher o material errado. É achar que está avançando quando não está. Três hábitos que separam quem chega de quem desiste no quarto mês.
Escreva o código à mão, sem copiar. Digitar o exemplo que já está pronto na tela ao lado parece estudo e não é. Feche a aula, escreva de memória, erre, compare depois. O erro é o mecanismo de aprendizado — pular o erro é pular a aula.
Explique em voz alta. Depois de fazer um exercício funcionar, explique para uma parede o que cada linha faz. Onde você gaguejar, tem buraco. Esse teste é brutalmente eficiente e leva dois minutos.
Revise o que já sabe. Uma vez por semana, refaça um exercício de duas semanas atrás. Vai parecer perda de tempo até a primeira vez que você não conseguir — e descobrir que “saber” era reconhecer, não produzir.
E um alerta sobre IA: usar um assistente para explicar um conceito é excelente; usar para escrever o exercício por você é o novo tutorial infinito, com um disfarce melhor. A pergunta útil é “por que isso funciona?”, não “escreve para mim”.
O que você não precisa aprender agora
Metade da ansiedade de quem começa vem de uma lista de tecnologias que alguém disse ser obrigatória. Quase nada nessa lista é urgente, e adiar as coisas certas é o que mantém o estudo possível.
TypeScript. Vale muito, e vale depois. TypeScript resolve um problema que você ainda não tem: código grande demais para caber na cabeça. Antes de sentir esse problema, os tipos viram só uma segunda sintaxe para decorar em cima de uma primeira que ainda não assentou.
Frameworks. React, Vue e Angular são camadas sobre JavaScript. Quem pula direto para o framework aprende a repetir um padrão sem saber o que ele faz por baixo, e trava no primeiro erro que sai do caminho feliz. A pergunta honesta é: você consegue montar uma lista que filtra e atualiza a tela usando só o DOM? Se sim, o framework vai fazer sentido em uma semana. Se não, ele vai virar mágica.
Estruturas de dados e algoritmos em profundidade. Big-O e árvore binária importam em entrevista de big tech e em problema específico. Para a primeira vaga, saber usar array e objeto bem resolve mais.
A configuração perfeita de editor. Trocar o tema pela quarta vez rende zero linha de código. Instale o editor, o Node e siga.
O que realmente vale antecipar é o Git — mesmo básico, mesmo só add, commit
e push. Não porque a entrevista pede, mas porque é o que transforma
“consegui” em “consigo voltar quando quebrar”. Perder duas semanas de projeto
por não ter versionado é uma lição cara demais para se pagar duas vezes.
Quanto tempo isso leva
Com uma a duas horas por dia, de forma consistente:
- Semanas 1 a 4 — lógica, variáveis, condicionais, laços. Você escreve scripts pequenos que rodam no console.
- Semanas 5 a 10 — funções, arrays, objetos, DOM. Você monta páginas interativas sem copiar de ninguém.
- Semanas 11 a 16 — assincronismo, APIs, módulos, um projeto publicado. Você tem o que mostrar numa entrevista.
Consistência vale mais que intensidade. Uma hora todo dia rende muito mais do que sete horas no sábado, porque programação é memória de procedimento — a mesma que aprende a dirigir. Precisa de repetição espaçada, não de maratona.
O que estudar depois
Terminada a base, três direções fazem sentido, nesta ordem de dificuldade:
Front-end com React. Componentes, estado e o ecossistema ao redor. A categoria de front-end cobre o caminho.
Back-end com Node.js. APIs, banco de dados, autenticação, deploy. Mesma linguagem, outra cabeça: agora você é responsável pelos dados de outras pessoas. Veja a categoria de back-end.
TypeScript. Tipos por cima do JavaScript. Não antes de ter escrito uns dois projetos sem eles — tipo só faz sentido quando você já sentiu falta de um.
E, seja qual for a direção, mantenha o hábito de ler código dos outros. Abra um repositório de uma biblioteca que você usa e leia uma função por dia. Nenhum curso substitui isso.
Para começar agora e na ordem certa, entre pela trilha de JavaScript do zero: as lições estão numeradas, cada uma tem código executado e o erro mais comum dela.
Trilha
JavaScript do zero
A trilha completa de JavaScript, em ordem de estudo: da primeira variável ao código assíncrono. Cada lição com código executado.
- 01O que é JavaScript e para que serve na prática
- 02Como executar JavaScript no navegador e no Node
- 03console.log: como imprimir valores no JavaScript
- 04Variáveis em JavaScript: como declarar e usar
- 05Variáveis em JavaScript: var, let e const na prática
- 06Tipos de dados em JavaScript e o operador typeof
- 07null, undefined e NaN: qual a diferença em JS
- 08Converter string em número em JavaScript
- 09Template literals: interpolação de string em JS
- 10Operadores aritméticos em JavaScript: do + ao **
- 11== ou ===: comparação e igualdade em JavaScript
- 12Operadores lógicos em JavaScript: &&, || e !
- 13Truthy e falsy em JavaScript: os 8 valores falsos
- 14Strings em JavaScript: criar, concatenar e escapar
- 15Métodos de string em JavaScript: os essenciais
- 16Números em JavaScript: arredondar e casas decimais
- 17Formatar moeda em JavaScript: real, Intl e centavos
- 18Número aleatório em JavaScript: Math.random na prática
- 19if else em JavaScript: como escrever condições
- 20Operador ternário em JavaScript: if em uma linha
- 21switch case em JavaScript: como usar e quando usar
- 22Laço for em JavaScript: sintaxe, break e continue
- 23while e do while em JavaScript: laços com condição
- 24Funções em JavaScript: como criar, chamar e reaproveitar
- 25Parâmetros e retorno de função em JavaScript
- 26Function expression vs declaration em JavaScript
- 27Arrow function em JavaScript: sintaxe e o this
- 28Função callback em JavaScript: o que é e exemplos
- 29Escopo em JavaScript: global, de função e de bloco
- 30Hoisting em JavaScript: o que é e como evitar erro
- 31Closure em JavaScript explicado com exemplos
- 32this em JavaScript: contexto, bind, call e apply
- 33Arrays em JavaScript: criar, ler e entender por dentro
- 34Adicionar e remover elementos de um array em JS
- 35Percorrer array em JavaScript: forEach, for of e for
- 36map, filter e reduce em JavaScript com exemplos
- 37Buscar elemento em array: find, includes e indexOf
- 38Ordenar array em JavaScript com sort()
- 39Array de objetos em JavaScript: filtrar e somar
- 40Objetos em JavaScript: criar, acessar e alterar
- 41Percorrer objeto em JavaScript: Object.keys e for in
- 42Desestruturação, spread e rest em JavaScript
- 43Optional chaining e nullish coalescing em JavaScript
- 44JSON em JavaScript: JSON.parse e JSON.stringify
- 45Datas em JavaScript: formatar data dd/mm/aaaa
- 46Classes em JavaScript: POO com class e constructor
- 47Herança em JavaScript: extends, super e prototype
- 48JavaScript assíncrono: event loop e call stack
- 49setTimeout e setInterval em JavaScript
- 50Promise em JavaScript: then, catch e finally
- 51async e await em JavaScript: como usar na prática
- 52Fetch API: como consumir uma API com JavaScript
- 53Promise.all, allSettled e race em JavaScript
- 54O que é o DOM em JavaScript e como funciona
- 55querySelector e getElementById: selecionar elementos
- 56innerHTML e textContent: alterar HTML com JavaScript
- 57classList e style: mudar o CSS com JavaScript
- 58createElement: criar e remover elementos com JS
- 59addEventListener: eventos de clique em JavaScript
- 60Objeto event, preventDefault e delegação de eventos
- 61Como pegar o valor de um input com JavaScript
- 62Validar formulário com JavaScript: guia prático
- 63localStorage: salvar dados no navegador com JS
- 64window.location: redirecionar página com JavaScript
- 65try catch em JavaScript: tratamento de erros
- 66Tipos de erro em JavaScript e como ler o console
- 67Debugar JavaScript no DevTools: passo a passo
- 68Módulos em JavaScript: import e export (ES Modules)
- 69Regex em JavaScript: expressões regulares na prática
Trilha
Carreira em programação
O Método DevClub aplicado à contratação: portfólio, currículo, LinkedIn, entrevista e negociação.
Perguntas frequentes
Quanto tempo leva para aprender JavaScript?
Preciso saber HTML e CSS antes?
JavaScript e Java são a mesma coisa?
Devo aprender TypeScript no lugar de JavaScript?
O código deste guia foi executado em Node 24.16.0, e as saídas exibidas são as reais — como produzimos este conteúdo.
Fontes consultadas
- MDN Web Docs — JavaScript — developer.mozilla.org
- ECMA-262 — ECMAScript Language Specification — tc39.es
- Stack Overflow Developer Survey 2025 — Technology — survey.stackoverflow.co