Skip to content
This page has been auto-translated and may contain errors.View in English

O que é JavaScript

docs.scrimba.com

Abra uma página da web e clique em um botão que abre um menu, digite em uma caixa de pesquisa que sugere resultados conforme você digita, ou veja um feed carregando mais posts enquanto você rola a página. Nada disso é HTML, e nada disso é CSS. É JavaScript: a linguagem que é executada dentro do navegador e faz uma página responder ao que você faz. Este capítulo é sobre o que essa linguagem é, onde ela é executada e como se encaixa com o HTML e CSS que você já conhece.

Uma linguagem para fazer as páginas funcionarem

JavaScript é uma linguagem de programação: uma forma de escrever instruções que um computador executa passo a passo. Onde HTML descreve o que está em uma página e CSS descreve como ela se parece, JavaScript descreve o que acontece. É a parte que reage.

Pense em uma página web como uma casa. HTML é a estrutura, as paredes e salas. CSS é a pintura e mobiliário. JavaScript é a eletricidade e encanamento: a fiação que faz um interruptor acender uma lâmpada, ou uma torneira produzir água. É o que faz a página fazer algo quando uma pessoa interage com ela.

JavaScript é a camada de comportamento de uma página web. HTML fornece estrutura e CSS fornece apresentação; JavaScript adiciona lógica e interatividade. Ele pode ler e alterar a página depois que ela é carregada, responder a eventos como cliques e pressionamentos de tecla, manter o controle do estado e conversar com servidores para carregar novos dados.

Ao contrário de HTML e CSS, que descrevem um resultado, JavaScript é uma linguagem de programação completa: tem variáveis, condições, loops e funções. Você não está apenas declarando o que deseja, está escrevendo os passos que o navegador executa. Essa é a mudança sobre a qual este manual trata: de descrever uma página para programá-la.

JavaScript é uma linguagem de programação dinamicamente tipada de alto nível (valores têm tipos, mas variáveis não estão presas a um, portanto um nome pode conter um número agora e uma string depois). No navegador, é a camada de comportamento: ela manipula o DOM (o Document Object Model, a árvore viva na memória que o navegador constrói a partir do seu HTML) em resposta a eventos, gerencia o estado e executa requisições de rede.

O enquadramento que vale a pena manter é que HTML e CSS são declarativos enquanto JavaScript é imperativo e Turing-completo: você expressa computação, não apenas um resultado desejado. Esse poder é por que ele carrega a interatividade da web inteira, e também por que a disciplina que HTML e CSS dificilmente precisam, nomeação, estrutura, tratamento de erros, se torna sua responsabilidade no momento em que a lógica entra na página. A maior parte deste manual é sobre exercer esse poder sem criar uma bagunça que apenas você consegue ler.

js
// HTML te dá um botão. JavaScript faz algo com ele.
const button = document.querySelector(".menu-toggle");
button.addEventListener("click", openMenu);

Você encontrará cada peça disso em capítulos posteriores. Por enquanto, observe a forma: JavaScript alcança a página (document.querySelector), e responde a algo que o usuário faz (addEventListener). Alcançar dentro e responder são a maioria do que o JavaScript do navegador faz.

JunoUma linguagem para fazer as páginas funcionarem HTML é estrutura, CSS é estilo, JavaScript é comportamento: a parte que reage quando alguém usa a página. É uma linguagem de programação real, então você escreve instruções que o navegador segue passo a passo. Essa é a mudança que você está começando: de descrever uma página para dizer a ela o que fazer.
JunoUma linguagem para fazer as páginas funcionarem JavaScript é a camada de comportamento: ele lê e altera a página, responde a eventos e conversa com servidores. Ao contrário de HTML e CSS, ele é uma linguagem completa com lógica e estado, então você programa a página em vez de declará-la. Manter esse trabalho claro em sua mente torna os outros dois mais fáceis de situar.
JunoUma linguagem para fazer as páginas funcionarem JavaScript é imperativo e Turing-completo, o que é por que ele carrega a interatividade da web inteira e por que a estrutura se torna seu trabalho no momento em que a lógica aparece. É dinamicamente tipado, então um nome pode conter qualquer tipo e as verificações de tipo acontecem no tempo de execução. A maior parte do ofício aqui é exercer esse poder sem escrever código que apenas você consegue ler.

Onde JavaScript é executado

JavaScript é executado dentro do navegador. Cada navegador, Chrome, Safari, Firefox, tem um engine integrado que lê seu JavaScript e o executa. Isso significa que não há nada para instalar para começar: se você consegue abrir uma página da web, você consegue executar JavaScript.

Você adiciona JavaScript a uma página com uma tag <script>, geralmente logo antes da tag de fechamento </body>. Para manter seu código em seu próprio arquivo, aponte a tag para ele com um atributo src que nomeia o arquivo, da mesma forma que uma tag de imagem aponta para uma imagem.

O lugar mais rápido para tentar uma linha de código é o console do navegador, um painel nas ferramentas de desenvolvedor onde você pode digitar JavaScript e ver o resultado imediatamente.

JavaScript é executado em um runtime: um ambiente que fornece o engine para executar seu código mais os recursos extras que esse código pode usar. No navegador, o runtime oferece o document para a página, window para a aba do navegador, fetch para requisições de rede e muito mais. A linguagem em si é pequena; a maioria do que você usa no navegador vem do runtime ao seu redor. Carregue um script externo com uma tag <script> e seu atributo src, e adicione defer para que o navegador termine de construir a página antes de executar o script, o que o poupa de uma classe de bugs "elemento não encontrado". O console nas ferramentas de desenvolvimento é um runtime vivo em que você pode digitar, e é onde você testará ideias mais rapidamente.

JavaScript é definido por uma especificação de linguagem (ECMAScript) e executado por um engine como V8 (Chrome, Node) ou JavaScriptCore (Safari). O engine é apenas metade da história: as capacidades úteis vêm do ambiente host, o runtime que incorpora o engine e expõe APIs para ele. No navegador, esse host é a página, fornecendo o DOM, timers, fetch, armazenamento e eventos; em um runtime de servidor como Node, é o sistema operacional, fornecendo arquivos e sockets.

Duas consequências práticas. Primeiro, a mesma linguagem é executada em lugares muito diferentes, então "isso é JavaScript ou um recurso do navegador" é uma distinção real: Array e Promise são a linguagem, enquanto document e localStorage são o navegador. Segundo, como um script é carregado afeta o comportamento: um <script> clássico bloqueia a análise, defer o executa depois que o DOM é construído em ordem, e type="module" adia por padrão e oferece import/export mais seu próprio escopo. Saber qual você está usando explica muito da confusão "por que isso foi executado antes da página existir".

JunoOnde JavaScript é executado JavaScript é executado no navegador, que já tem um engine para executá-lo, então não há nada para instalar. Você o adiciona a uma página com uma tag <script>, e o lugar mais rápido para tentar uma linha é o console nas ferramentas de desenvolvedor do navegador. Abra-o e digite algo, você não consegue quebrar nada.
JunoOnde JavaScript é executado O navegador oferece um runtime: o engine mais extras como document e fetch. Carregue seu código com <script src> e adicione defer para que ele seja executado depois que a página é construída. O console é um runtime vivo para testar ideias, e é o feedback mais rápido que você terá.
JunoOnde JavaScript é executado O engine executa a linguagem (ECMAScript); o ambiente host fornece as APIs, é por isso que Array é JavaScript mas document é o navegador. Como um script é carregado também importa: scripts clássicos bloqueiam a análise, defer executa após o DOM em ordem, e type="module" adia e adiciona escopo de importação. Essa distinção explica a maioria dos bugs "isso foi executado antes da página existir".

Seu primeiro olhar para JavaScript

Aqui está um minúsculo programa. Você não precisa entender cada parte ainda, os próximos capítulos cobrem cada uma, mas você já consegue ler a forma disso:

js
let name = "João";
console.log("Olá " + name); // Olá João

A primeira linha armazena o texto "João" sob o nome name. A segunda linha imprime uma mensagem no console, juntando "Olá " e o nome armazenado. console.log é como você pede ao JavaScript para mostrar a você um valor enquanto está aprendendo, e você o usará constantemente.

Um primeiro programa, pequeno mas completo:

js
let name = "João";
let greeting = "Olá " + name;
console.log(greeting); // Olá João

Três ideias já estão aqui: uma variável que contém um valor, uma expressão que combina valores ("Olá " + name), e uma declaração que faz algo com o resultado (console.log). Quase todo JavaScript é essas três coisas empilhadas: dar nome a alguns valores, computar com eles, e agir no resultado. console.log imprime no console e é sua ferramenta padrão para ver o que seu código está realmente fazendo.

O menor programa útil ainda mostra o loop central da linguagem:

js
const name = "João";
const greeting = `Olá ${name}`;
console.log(greeting); // Olá João

Observe as escolhas que um desenvolvedor que trabalha faz por reflexo aqui: const em vez de let porque a ligação nunca muda (sinalizando intenção e evitando reatribuição acidental), e um template literal (a string com acento grave com ${...}) em vez de concatenação + porque é mais fácil de ler e trata tipos de forma mais previsível. Nada disso é necessário para fazer a linha funcionar, que é exatamente o ponto: JavaScript aceitará a versão frouxa felizmente, então a qualidade do seu código vem de decisões que a linguagem não força. Este manual gasta muito de seu tempo nessas decisões, começando com variáveis a seguir.

JunoSeu primeiro olhar para JavaScript Um programa é principalmente isto: armazene alguns valores, combine-os e faça algo com o resultado. console.log imprime um valor para que você possa vê-lo, e é seu melhor amigo enquanto aprende. Não se preocupe com os detalhes ainda, você conhecerá cada parte propriamente nos próximos capítulos.
JunoSeu primeiro olhar para JavaScript A maioria do JavaScript é três coisas empilhadas: variáveis que contêm valores, expressões que as combinam e declarações que agem no resultado. Reconhecer esses três em qualquer trecho torna o código desconhecido muito menos intimidador. Mantenha console.log por perto, é como você verifica o que seu código está realmente fazendo.
JunoSeu primeiro olhar para JavaScript A linguagem executa a versão frouxa e a versão cuidadosa igualmente, então a qualidade vem de escolhas que ela nunca força: const sobre let quando uma ligação é fixa, template literals sobre + para legibilidade. Essa liberdade é a bênção e a armadilha do JavaScript. Os próximos capítulos tratam em grande parte de fazer essas chamadas bem, começando com variáveis.

O que "JavaScript moderno" significa

Você ouvirá pessoas falando sobre JavaScript moderno. JavaScript existe desde 1995 e recebe novos recursos a cada ano, mas o código antigo continua funcionando, então a linguagem acumulou algumas formas diferentes de fazer a mesma coisa ao longo dos anos.

A boa notícia: você não precisa do histórico. Este manual ensina a forma atual e recomendada de escrever cada coisa. Se você vir tutoriais mais antigos usando var para fazer variáveis, esse é o estilo antigo; você aprenderá let e const em vez disso, que é o que os desenvolvedores usam hoje.

"JavaScript moderno" geralmente significa a linguagem como ela tem sido desde uma grande atualização de 2015 (chamada ES2015, ou ES6) e as adições anuais desde então. Essa atualização adicionou let e const, arrow functions, template literals e muito mais, e é a linha de base que cada navegador atual suporta.

É importante porque você encontrará dois períodos de código. Materiais mais antigos usam var, expressões function em todos os lugares e concatenação de strings; código atual usa const/let, arrow functions e template literals. Este manual ensina o estilo moderno em todo o documento e nomeado as formas antigas apenas para que você as reconheça na natureza. Você não precisará de ferramentas de construção ou configuração para usar nenhuma delas; ele é executado no navegador assim.

JavaScript é padronizado como ECMAScript, e desde ES2015 a especificação é enviada anualmente (ES2016, ES2017 e assim por diante), cada uma adicionando um pequeno conjunto de recursos retrocompatíveis. "JavaScript moderno" é uma abreviação para escrever contra essa linguagem evoluída, const/let, arrow functions, template literals, destructuring, módulos, async/await, em vez dos idiomas pré-2015.

A razão pela qual isso fica simples na prática é o compromisso quase absoluto do JavaScript com retrocompatibilidade: nova sintaxe é adicionada, sintaxe antiga quase nunca quebra, então um script de uma década atrás ainda é executado. É por isso que você pode aprender apenas as formas modernas e tratar com segurança var e sua era como conhecimento somente leitura para manter código antigo. O único lugar onde o passado se intromete é quando você lê a base de código anterior de outra pessoa, e este manual sinaliza essas formas antigas conforme elas aparecem para que elas não o troplem. O próximo capítulo, variáveis, começa exatamente ali, com a forma moderna de nomear e armazenar valores.

JunoO que JavaScript moderno significa JavaScript é antigo e mantém seu código antigo funcionando, então há algumas formas de fazer algumas coisas. Você não precisa do histórico: este manual ensina a forma atual e recomendada cada vez. Se um tutorial usar var, esse é o estilo antigo, e você aprenderá let e const em vez disso.
JunoO que JavaScript moderno significa JavaScript moderno significa a linguagem desde a atualização de 2015: const e let, arrow functions, template literals. Você encontrará código anterior que usa var e concatenação, então este manual ensina o estilo moderno e nomeado as formas antigas apenas para que você as reconheça. Tudo é executado no navegador sem uma etapa de construção.
JunoO que JavaScript moderno significa ECMAScript é enviado anualmente e permanece retrocompatível, então nova sintaxe é adicionada e sintaxe antiga quase nunca quebra. É por isso que você pode aprender apenas as formas modernas e tratar var e sua era como conhecimento somente leitura para bases de código antigas. Escreva contra a linguagem evoluída e deixe o manual sinalizar as formas legadas conforme aparecem.

Para onde JavaScript vai daqui

JavaScript é uma linguagem grande, mas começa pequena: valores, nomes para eles e formas de combiná-los e agir sobre eles. Uma vez que esses cliquem, o resto deste manual se constrói: tomar decisões e repetir trabalho, organizar código em funções, manter coleções em arrays e objetos, e então alcançar a própria página com o DOM para construir coisas que as pessoas podem realmente usar.

O próximo capítulo, variáveis, é onde o trabalho real começa: como armazenar um valor, a diferença entre let e const, e o pequeno conjunto de regras sobre o qual toda o resto da linguagem é construído.