O que é JavaScript e por que aprender?

O que é JavaScript e por que aprender?

Criada em dez dias, em 1995, e ainda assim a única linguagem que todo navegador executa nativamente. O artigo inaugural vai do primeiro console.log até o template literal, passando pelo const que é padrão e pelo let que é exceção, pelos tipos primitivos e pelo 10/3 que não fecha em 3,333.
Javascript

• • 9 min de leitura

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:

  1. Crie uma const com seu nome
  2. Crie um let com seu ano de nascimento
  3. Calcule sua idade subtraindo o ano atual
  4. 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 leituras recomendadas

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.

Comentários

Mais em Javascript

Testes automatizados com Jest
Testes automatizados com Jest

Mexer num código que estava funcionando e quebrar outra coisa é o problema que…

Escopo, Hoisting e Closures
Escopo, Hoisting e Closures

Um laço com var e um setTimeout dentro imprime 4, 4, 4 — e explicar esse…

Formulários: validação e coleta de dados
Formulários: validação e coleta de dados

Um campo de senha e outro de confirmação já mostram o limite do HTML sozinho…