T12 — Execução e sintaxe de JavaScript
Resumo Conciso
Executar JavaScript no navegador
O JavaScript é uma linguagem de programação que permite ao navegador atualizar dinamicamente o conteúdo de um website. É executado pelo navegador que visualiza a página web e segue a especificação ECMAScript.
Inclusão direta no HTML:
<html> <head></head> <body> <h1>Website Headline</h1> <p>Content</p> <script> console.log('test'); </script> </body></html>Inclusão de ficheiro externo:
<html> <head> <script src="/button-interaction.js"></script> </head> <body></body></html>Quando se usa o atributo src, qualquer código entre <script>...</script> é ignorado.
Posicionamento do <script>
| Localização | Quando usar |
|---|---|
Final do <body> | Script depende do conteúdo da página (ex.: interação com botões) |
Dentro do <head> | Script precisa executar antes do corpo ser analisado |
Atributos da tag <script>
| Atributo | Descrição |
|---|---|
src | Define a localização do ficheiro JavaScript externo |
async | Busca o script em segundo plano sem bloquear o carregamento; executa assim que disponível |
defer | Busca o script em segundo plano; executa só após todo o HTML ser analisado |
type | Indica o tipo de script (por omissão na especificação HTML: text/javascript); pode desativar scripts com valores arbitrários |
Importante: async executa na ordem do download, defer preserva a ordem das tags. async implica defer parcialmente — não é necessário usar ambos.
Console do navegador
| Navegador | Atalho (Windows/Linux) | Atalho (Mac) |
|---|---|---|
| Chrome | Ctrl + Shift + J | Cmd + Option + J |
| Firefox | Ctrl + Shift + K | Cmd + Option + K |
| Safari | Ctrl + Shift + ? | Cmd + Option + ? |
Também é possível aceder pelo inspetor (clique direito → "Inspecionar" → guia "Console").
Declarações em JavaScript
- Cada declaração termina com
;(ponto e vírgula). - Espaços em branco (espaços, novas linhas, tabulações) são ignorados.
- O ECMAScript tenta inserir automaticamente
;(ASI — Automatic Semicolon Insertion), mas é recomendado sempre os incluir.
Exemplo com duas declarações:
var message = "test";console.log(message);Comentários em JavaScript
| Tipo | Sintaxe | Utilização |
|---|---|---|
| Multilinhas | /* ... */ | Bloco de texto, metainformações |
| De uma linha | // | Comentários pontuais |
/* This script was written in May, 2020.*/// First, we define a message.var message = "test";console.log(message); // Output to consoleComentários também servem para remover temporariamente código:
// var message = "test";var message = "something else";🧭 Exercícios Guiados (resolvidos)
Exercício Guiado 1 — Criar uma variável e atribuir um valor
Enunciado: Crie uma variável chamada ColorName e atribua a ela o valor RED.
Solução passo a passo:
- Usar a palavra-chave
var(oulet) para declarar a variável. - Atribuir o valor entre aspas duplas (string).
- Terminar a declaração com ponto e vírgula.
var ColorName = "RED";Exercício Guiado 2 — Validar scripts JavaScript
Enunciado: Quais dos scripts a seguir são válidos?
// Script Aconsole.log("hello")console.log("world");// Script Bconsole.log("hello");console.log("world");// Script C// console.log("hello")console.log("world");// Script Dconsole.log("hello");console.log("world") //;// Script Econsole.log("hello"); /*console.log("world") */Solução passo a passo:
- Script A — Válido: O primeiro
console.log("hello")não termina com;, mas como está no fim de uma linha e a declaração seguinte não dá continuidade válida à anterior, a ASI (Automatic Semicolon Insertion) insere automaticamente o;no fim da linha. A segunda declaração já tem;explícito. - Script B — Válido: Todas as declarações terminam corretamente com
;. - Script C — Válido: O primeiro comando está comentado com
//, logo é ignorado.console.log("world");é válido. - Script D — Válido: A última declaração
console.log("world")não tem;, mas o//;está dentro de um comentário e não conta. Como se trata da última declaração do script (fim do input), a ASI insere o;automaticamente. - Script E — Válido:
console.log("hello");é válido; o restante é um comentário multilinha/* ... */e é ignorado.
Exercício Guiado 3 — var, let e const
Enunciado: Qual é a diferença entre declarar uma variável com var, let e const? Qual deve ser preferida?
Solução passo a passo:
vardeclara uma variável com escopo de função (ou global se estiver fora de qualquer função) e permite reatribuição; é a forma mais antiga.letdeclara uma variável com escopo de bloco (entre{ ... }) e também pode ser reatribuída.constdeclara uma constante com escopo de bloco: não pode ser reatribuída após a inicialização (mas os conteúdos de objetos/arrays permanecem mutáveis).- Resposta: Prefere-se
constpor omissão eletquando se precisa reatribuir; evita-sevarem código moderno.
const pi = 3.14159; // não pode ser reatribuídolet contador = 0; // pode ser reatribuídocontador = contador + 1;var antigo = "evitar em código moderno";Exercício Guiado 4 — Operador de igualdade estrita === vs. ==
Enunciado: Qual a diferença entre os operadores == e ===? Dê um exemplo em que dão resultados diferentes.
Solução passo a passo:
- O operador
==(igualdade ligeira) compara valores convertendo os operandos a um tipo comum antes da comparação (coerção de tipo). - O operador
===(igualdade estrita) compara valor e tipo sem efetuar coerção. - Exemplo:
"5" == 5étrue(a string é convertida a número), mas"5" === 5éfalse(tipos diferentes). - Resposta: Recomenda-se usar sempre
===(e!==), pois evita conversões implícitas difíceis de prever.
console.log("5" == 5); // true (com coerção)console.log("5" === 5); // false (sem coerção)console.log(0 === false); // false🔬 Exercícios Exploratórios (prática no terminal)
- Enunciado: Quantas instruções JavaScript podem ser escritas em uma única linha sem usar um ponto e vírgula?
// Apenas uma declaração pode ser omitida o ponto e vírgula se estiver no final do script. // Exemplo: a última declaração antes do fim do ficheiro pode omitir o ; console.log("hello")Explicação: Se estivermos no final de um ficheiro/script, podemos escrever uma declaração sem ; e ela será encerrada automaticamente. Caso contrário, não se pode escrever mais do que uma declaração sem ; na mesma linha com a sintaxe básica.
- Enunciado: Crie duas variáveis chamadas
xeye imprima a soma delas no console.
var x = 5; var y = 10; console.log(x + y);Explicação: Declaramos duas variáveis numéricas e usamos o operador + para somá-las dentro de console.log().
- Enunciado: Utilize o operador
typeofpara descobrir o tipo de cada um dos seguintes valores:"Olá",42,true,undefinedenull.
console.log(typeof "Olá"); // "string" console.log(typeof 42); // "number" console.log(typeof true); // "boolean" console.log(typeof undefined); // "undefined" console.log(typeof null); // "object" (nota histórica do JavaScript)Explicação: typeof devolve uma string com o nome do tipo do operando. O caso de null é uma peculiaridade histórica da linguagem: typeof null devolve "object" e não "null", pelo que se costuma testar valor === null quando se quer distinguir o caso.
- Enunciado: Escreva um script que declare uma variável
nome, mostre uma saudação na consola comconsole.log()e também numa caixa de alerta comalert(). Comente o código com//para explicar cada passo.
// Declaração do nome do utilizador let nome = "Maria"; // Saída na consola do navegador console.log("Olá, " + nome); // Caixa de alerta modal (bloqueia até fechar) alert("Bem-vinda, " + nome);Explicação: console.log() escreve na consola de desenvolvimento (não visível na página) e é ideal para depuração; alert() abre uma caixa de diálogo modal sobre a página. Os comentários // documentam a intenção de cada instrução sem afetar a execução.
- Enunciado: Sem executar o código, preveja o resultado de
"5" + 3e de"5" - 3. Justifique a diferença com base na coerção de tipos.
console.log("5" + 3); // "53" console.log("5" - 3); // 2Explicação: O operador +, na presença de uma string, converte o outro operando em string e efetua concatenação, pelo que "5" + 3 resulta em "53". Já o operador - não tem significado para strings, por isso o JavaScript converte "5" em número e faz subtração numérica, dando 2. Esta assimetria é uma das razões para preferir conversões explícitas (ex.: Number("5") + 3).