O que é JavaScript e por que aprender?

[2] 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 Referências

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 undefinedlet 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

Callbacks: o começo de tudo
Callbacks: o começo de tudo

Antes das Promises, esperar era passar uma função para ser chamada depois. O…

Fetch API: consumindo dados da internet
Fetch API: consumindo dados da internet

Aqui os dados deixam de ser simulados com setTimeout e passam a vir da…

Projeto: API REST com autenticação JWT
Projeto: API REST com autenticação JWT

O Módulo 4 fecha juntando Node, Express, MongoDB e Mongoose numa API de…