Aula 05 Javascript
Aula 05 Javascript
SARMENTO E
HENRIQUE S. L. PEQUENO
INTRODUÇÃO A
JAVASCRIPT
JAVASCRIPT IN A NUTSHELL
RESUMO
▸ Visão Geral
▸ Entradas e Saídas
▸ Estruturas de Programa
▸ Funções
VISÃO GERAL
▸ Nasceu em 1995 no Netscape Navigator
▸ ECMA-334: Linguagem C#
VISÃO GERAL
▸ A especificação recente do Javascript pode ser
acessada pelo link https://tc39.es/ecma262/ (2022)
▸ Uma boa documentação para uso da linguagem
Javascript pode ser encontrada na Mozilla
Development Network (MDN):
https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference
JAVASCRIPT IN A NUTSHELL
VISÃO GERAL
▸ É uma linguagem interpretada
VISÃO GERAL
▸ Um Interpretador Javascript, hoje, é chamado de
Javascript Engine
VISÃO GERAL
USE O CHROME E
PROCURE ACESSAR O
CONSOLE PARA TESTAR
OS COMANDOS JAVA
SCRIPT A SEGUIR
Mister Javascript
JAVASCRIPT IN A NUTSHELL
Toda vez que digitar um comando, tecle ENTER. O console.clear() apaga os dados exibidos no
Console.
JAVASCRIPT IN A NUTSHELL
Mister Javascript
JAVASCRIPT IN A NUTSHELL
Mister Javascript
JAVASCRIPT IN A NUTSHELL
OBSERVAÇÃO
Processin Javascrip
g t
//Programa que conta de 1 até //Programa que conta de 1 até
1000 de dois em dois 1000 de dois em dois números
números
int cont;
for(cont=1;cont<1000;cont+=2 for(let
){ cont=1;cont<1000;cont=+2){
println("O contador tem o console.log("O contador tem o
valor: %d",cont); valor: ",cont);
} }
JAVASCRIPT IN A NUTSHELL
● var:
○ as declarações de var tem escopo global ou de função;
○ variáveis de var podem ser atualizadas e declaradas novamente dentro de seu escopo.
○ Não pode ter escopo de bloco
● let
○ Escopo de bloco
○ As variáveis de let podem ser atualizadas, mas não podem ser declaradas novamente
● const
○ Escopo de bloco
○ As variáveis de const não podem ser atualizadas nem declaradas novamente.
● Obs. 1: Todas elas passam por hoisting para o topo de seu escopo. Porém,
enquanto variáveis com var são inicializadas com undefined, as variáveis com
let e const não são inicializadas.
● Obs. 2: Enquanto var e let podem ser declaradas sem ser inicializadas, const
precisa da inicialização durante a declaração.
Declarando variáveis em JS
● Ex.:
var greeter = "hey hi";
function newFunction() {
var hello = "hello";
}
Detalhe:
greeter tem um escopo global
hello tem um escopo de função
Declaração de variáveis com var
Como também:
var greeter = "hey hi";
greeter = "say Hello instead";
Hoisting de var
O trecho acima, mesmo permitido pelo JS, pode suscitar vários erros no
programa, pelo uso inadvertido de var.
Declarando variáveis com let
let x = 10;
if (true) {
let x = 20; // OK: variável x é diferente no escopo do bloco if
console.log(x); // exibe 20
}
function teste() {
let x = 30; // OK: variável x é diferente no escopo da função teste
console.log(x); // exibe 30
}
teste();
console.log(x); // exibe 10
Exemplo de escopo de bloco do let
if (1){
let it = 'go';
var i = 'abel';
console.log(it);
console.log(i);
}
console.log(i);
console.log(it);
Exemplo de escopo de bloco do let (1)
function printNumber() {
let number = 10;
if (true) {
let number = 20;
console.log(number);
}
console.log(number);
}
printNumber();
Exemplo de escopo de bloco do let (3)
function count() {
for (let i = 0; i < 5; i++) {
console.log(i);
}
console.log(i);
}
count();
Exemplo de escopo de bloco do let (4)
function printName() {
let name = 'João';
function displayName() {
let name = 'José';
console.log(name);
}
displayName();
console.log(name);
}
printName();
Exemplo de escopo de bloco do let (5)
let val = 0;
function changeValue() {
let val = 10;
console.log(val); // Saída: 10
if (true) {
let val = 20;
console.log(val); // Saída: 20
}
console.log(val); // Saída: 10
}
console.log(val);
changeValue();
Declaração utilizando const
● Valores uma vez atribuídos, não podem ser alterados. Porém, não
significa que são imutáveis.
● O conteúdo de Arrays ou propriedades de objetos podem ser alterados.
Arrays podem ser modificados pelas funções push(), pop(), ou map() e
propriedades de objetos podem ser adicionadas, removidas ou
updatadas.
● Ex:
// Declared and initialized
const example = { prop1: 'test' };
// Variable reassigned
example = 5;
// Expect TypeError error because variable was declared with const
// Object property updated
example.prop1 = 5;
// Expect no error because property was modified
Const: Exemplo 1
const PI = 3.14159;
console.log(PI); // Saída: 3.14159
const person = {
name: 'Maria',
age: 25
};
person.age = 30;
console.log(person.age); // Saída: 30
function printNumber() {
if (true) {
const number = 42;
console.log(number); // Saída: 42
}
console.log(number); // Erro: ReferenceError: number is not defined
}
printNumber();
Const: Exemplo 4
// Exemplo 1:
// Exemplo 2:
Ex1: Ex.3:
Ex2:
// Expected output: 0
// Exemplo 1: // Exemplo 2:
let valor1 = null; let valor3 = 0;
let valor2 = 10; let valor4 = 42;
let resultado = valor1 ?? let resultado2 = valor3 ??
valor2; valor4;
console.log(resultado); // console.log(resultado2); /
Saída: 10 /
Saída: 0
OBSERVAÇÃO
▸ Vejamos um exemplo bastante útil para quando
estamos criando uma aplicação:
Caso nenhum dos nomes fosse definido, a expressão retornaria "Anonymous". No caso,
irá retornar "Supercoder".
JAVASCRIPT IN A NUTSHEL
ESTRUTURAS DE PROGRAMA
▸ Um programa em Javascript pode ser criado dentro do código
HTML, usando a tag <script>...</script>, ou ser chamado de fora do
HTML, <script src="nome.js">...</script>, através de uma arquivo
cuja a extensão, por convenção, é .js
▸ Hoje temos o type="module" que define módulos a serem usados em
javascript: <script type="module" src="nome.mjs">...</script>
// Módulo: math.js
return a + b;
// Módulo: main.js
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div id="resultado"></div>
</body>
Exemplo 2 (cont)
//calculadora.js
return a + b;
return a - b;
}
Exemplo 2 (cont)
// app.js }
function exibirResultado(resultado) {
▸ O que são?
▸ Como criá-los?
Listeners
▸ Listeners são usados para monitorar eventos que ocorrem em
elementos HTML, como cliques em botões, movimentos do
mouse, digitação em campos de formulário, entre outros. Assim
esses eventos podem ser detectados e tratados por meio do uso
de listeners.
2. Eventos de Teclado:
1. keydown: Ocorre quando uma tecla do teclado é pressionada.
1.Eventos de Formulário:
1.submit: Ocorre quando um formulário é enviado.
2.Eventos de Janela:
1.load: Ocorre quando a página é completamente carregada.
meuBotao.addEventListener('click', function() {
});
Listeners (com função nomeada)
function cliqueNoBotao() {
meuBotao.addEventListener('click', cliqueNoBotao);
Exemplo de uso de listeners
<body>
<form id="form-submit">
<h1>Exemplo de Listeners</h1>
<input type="text" id="input-
teclado2" name="nome"
<button id="botao">Clique placeholder="Digite seu nome">
aqui</button>
<button
type="submit">Enviar</button>
<div id="div-mouseover">Passe
o mouse aqui</div> </form>
</body>
<input type="text" id="input-
teclado">
▸ <script> const inputTeclado2 =
document.getElementById('input-teclado2');
// Listener para evento de clique
inputTeclado2.addEventListener('keyup',
const botao = document.getElementById('botao'); function(event) {
const formSubmit =
// Listener para evento de mouseover document.getElementById('form-submit');
}); });
});
Observação 1
▸ Ao usar addEventListener, você deseja associar a função especificada com
o evento em questão, para que ela seja chamada quando o evento
ocorrer. A função é tratada como um callback (retorno de chamada) que
será executado posteriormente, quando o evento for acionado.
elemento.addEventListener('click', minhaFuncao);
elemento.addEventListener('click', minhaFuncao());
elemento.addEventListener('click', function(event) {
});
function minhaFuncao() {
elemento.addEventListener('click', minhaFuncao);
elemento.addEventListener('click', function() {
minhaFuncao(parametro1, parametro2);
▸
Observação 3 (continuação)
elemento.addEventListener('click', () => {
minhaFuncao(parametro1, parametro2);
Concluindo
Se você usar uma arrow function com (parametro1, parametro2) => { ... }
como o manipulador de eventos, você está definindo uma função
que espera receber dois parâmetros parametro1 e parametro2. Essa
função será executada imediatamente, independentemente do
evento ter ocorrido ou não
Nesse caso, a função que você passou não está atuando como um
manipulador de eventos, mas sim como uma função que será
executada imediatamente. A execução ocorrerá no momento em que
o código alcançar essa parte do código, sem depender do evento.
elemento.addEventListener('click', () => {
minhaFuncao(parametro1, parametro2);
JAVASCRIPT IN A NUTSHELL
LAÇOS
▸ O Javascript possui três estruturas de laços:
▸ while(condição){...} , executa se condição===true
▸ for(;;){...}
for(inicialização do contador; condição de
parada; modificação de valor do contador){...}
▸ Onde condição deve retornar um valor booleano
JAVASCRIPT IN A NUTSHELL
EXEMPLOS DE LAÇOS
Exemplo de while
Exemplo de do...while()
Exemplo de for
Exercício 1
▸ Solicite um número do usuário e, a partir dele, realize uma contagem
regressiva
Solução do Exercício 1
numero--;
while (true) {
console.log("A soma dos números positivos
// Solicitar um número ao usuário inseridos é:", soma);
LAÇOS
▸ Uma diretiva bem interessante usada no Javascript é o continue. Ele
nos permite interromper uma dada iteração de um laço. Um
exemplo clássico é um contador de números ímpares (ver abaixo)
▸ Toda vez que a continue é chamada, aquela iteração será
descartada (parada) e se passará para a próxima
No exemplo acima, toda vez que i for par, a iteração é parada e se passa para a
próxima.
Exercício 3
▸ Crie um programa que imprima no console todos os números pares entre
1 e 20.
Resolução do Exercício 3
// Este exercício irá imprimir todos os números pares de 1 a 20 utilizando o laço for.
if (i % 2 === 0) {
console.log(i);
}
Exercício 4
▸ Calcule o fatorial de um número.
Resolução do Exercício 4
function calcularFatorial(numero) { const numero = parseInt(prompt("Informe
um número:"));
if (numero === 0) {
if (isNaN(numero) || numero < 0) {
return 1; // O fatorial de 0 é igual a 1
console.log("Valor inválido. Por favor,
} informe um número válido.");
}
JAVASCRIPT IN A NUTSHELL
ESTRUTURAS DE DECISÃO
▸ O Javascript possui três estruturas básicas de
decisão:
▸ if(condição){...}else if(condição){...}else{...}
▸ switch(condição){case valor:
...;break;case
valor: ...;break;...default: ...}
▸ Onde condição deve retornar um valor booleano
JAVASCRIPT IN A NUTSHELL
Exemplo de if
Exemplo do operador ?
JAVASCRIPT IN A NUTSHELL
Estrutura do switch
Funções
FUNÇÕES
▸ Para chamar uma função, basta usar seu nome seguido de ().
Exemplo, subtrai(a,b).
▸ Uma função sem nome é chamada Anônima. Exemplo: function (a,b)
{...}
EXEMPLOS DE FUNÇÕES
OBSERVAÇÃO
▸ Uma função pode possuir um nome muito pequeno, de um só caracter
function setup() {
createCanvas(800, 300);
sayHello();
}
function draw() {
background(220);
}
function sayHello() {
var message = 'Hello World!';
console.log(message);
}
console.log(message); // this line will throw an error
Exemplo de passagem de valor a uma função
Funções podem trabalhar sem inputs, com um único input ou com múltiplos inputs.
function setup() {
createCanvas(800, 300);
}
function draw() {
background(1, 75, 100);
squared(10);
}
function squared(num) {
fill(237, 34, 93);
textSize(60);
textAlign(CENTER, CENTER);
text ('O quadrado de ' + num + ' é: ',400,80);
text(num * num, width/2, height/2);
}
Retornando um valor
● Ex.1:
○ Crie uma função para retornar o fatorial de um número. Passe um número como
parâmetro para esta função.
● Ex.2:
○ Crie uma função para retornar o quadrado de um número. Passe um número
como parâmetro para esta função.
Palavra chave return
function setup() {
createCanvas(800, 300);
}
function draw() {
background(1, 75, 100);
var x = squared(10);
console.log(x);
}
function squared(num) {
fill(237, 34, 93);
textSize(60);
textAlign(CENTER, CENTER);
var result = num * num;
text(result, width/2, height/2);
// return the value of the result from the function
return result;
Funções em Notação Literal
1. Declaração de Função:
function reflect(value) {
return value;
}
2. Expressão de Função:
var reflect = function(value){
return value;
};
Execução de função
// Expressão de função não suporta hoisting, logo o código abaixo gerará ERRO
var result = add(5, 5);
var add = function(num1, num2) {
return num1 + num2;
};
console.log(result);
Obs.: para evitar complicações, recomenda-se que apenas se utilize uma função após
declará-la.
Funções como Valores
function calcular(operacao, a, b) {
return operacao(a, b);
}
this.metodo = function() {
// código do método
};
}
// Criando um objeto utilizando a função construtora
const objetoConstrutor = new ObjetoConstrutor(valor1, valor2);
JAVASCRIPT IN A NUTSHELL
};
console.log(square(5)); // Output: 25
JAVASCRIPT IN A NUTSHELL
CALLBACK
▸ Função que vai tratar uma evento assíncrono.
callback();
function sayGoodbye() {
greet("João", sayGoodbye);
Exemplo 2: Uso assíncrono do Callback
function asyncOperation(callback) { console.error("Ocorreu um erro:", error);
}
asyncOperation(handleResult);
O QUE É O DOM?
▸ Document Object Model: interface de programação para documentos XML e HTML
▸ O HTML DOM é um padrão para como obter, alterar, adicionar ou excluir
elementos HTML.
▸ A página HTML é convertida para uma árvore de objetos DOM pelo Navegador
DOCUMENT
HTML
HEAD BODY
TITLE H1
STYLE
P P
IMG
…
SCRIPT …
O QUE É O DOM?
▸ Document Object Model: interface de programação para documentos
XML e HTML
▸ A página HTML é convertida para uma árvore de objetos DOM pelo Navegador
<body>
<p id="demo"></p>
<script>
</script>
</body>
Objeto document
▸ Representa a página WEB
<p id=“demo"></p>
<script>
</script>
</body>
Encontrando elementos pelo nome da tag
<!DOCTYPE html> <button onclick="showText()">Mostrar Texto do
Primeiro Parágrafo</button>
<html lang="pt-BR">
<script>
<head>
function showText() {
<meta charset="UTF-8">
// Seleciona todos os elementos <p>
<meta name="viewport" content="width=device-width,
initial-scale=1.0"> const element =
document.getElementsByTagName("p");
<title>Exemplo de getElementsByTagName com
Botão</title> // Define o texto do parágrafo com id="demo"
</head> document.getElementById("demo").innerHTML =
'The text in first paragraph (index 0) is: ' +
<body>
element[0].innerHTML;
<h2>JavaScript HTML DOM</h2>
}
<p>Finding HTML Elements by Tag Name.</p>
</script>
<p>This example demonstrates the
<b>getElementsByTagName</b> method.</p>
</body>
<p id="demo"></p>
</html>
<body> <script>
<div id="minhaDiv">
<li>Item 3</li> }
</ul> </script>
</div>
<body>
<p>Este é um parágrafo dentro de uma div.</p> // Encontrar elementos pelo nome da tag
</div> }
<!DOCTYPE html>
<html> <script>
const y = x.getElementsByTagName("p");
document.getElementById("demo").innerHTML =
<div id="main"> 'The first paragraph (index 0) inside "main" is: ' +
y[0].innerHTML;
<p>Finding HTML Elements by Tag Name</p>
</div>
</body>
Exemplo de elementos enontrados pelo nome da classe
<body>
<script>
document.getElementById("demo").innerHTML
<p>Finding HTML Elements by Class =
Name.</p>
'The first paragraph (index 0) with class="intro"
<p class="intro">Hello World!</p> is: ' + x[0].innerHTML;
</body>
<p id="demo"></p>
Encontrando elementos usando seletores CSS
<!DOCTYPE html> <p id="demo"></p>
<html>
<body> <script>
const x = document.querySelectorAll("p.intro");
▸ 2- textContent
▸ 3- innerText
▸ Altera diretamente o valor de um atributo específico, como src
para imagens.
▸ Similar a textContent, mas respeita a renderização CSS
▸ document.getElementById('minhaImagem').src =
▸ document.getElementById(id).innerText = novoConteudo; 'caminho/novo/imagem.jpg';
Exemplo de uso: innerText;textContent e innerHTML
▸
console.log(document.getElementById('exem
plo').innerHTML); // Retorna "<p
Qual escolher?
▸ A escolha entre essas opções depende do tipo de elemento que você
está manipulando e do que você deseja realizar. Se você está lidando
com texto puro, textContent ou innerText são geralmente mais seguros
para evitar injeção de código (especialmente em situações em que o
conteúdo é dinâmico ou fornecido pelo usuário). Se estiver manipulando
atributos específicos, como src para imagens, você pode acessar
diretamente a propriedade do atributo. Se estiver lidando com HTML
estruturado, innerHTML é uma opção válida
JAVASCRIPT IN A NUTSHELL
OBSERVAÇÃO
▸ O identificador de uma Tag é um nome único atribuído à Tag através
do atributo id.
▸ Exemplo: <p id=“saida”> Texto do parágrafo </p>
▸ O identificador de classe de uma Tag permite identificar uma ou mais
tags diferentes através de um nome único, através do atributo class
▸ Exemplo:
DOM e Eventos
▸ Outra forma de selecionar um objeto DOM é usando
os métodos querySelector(), querySelectorAll() e
matches().
EXEMPLOS
<ul>
<li>The</li>
<li>test</li>
</ul>
<ul>
<li>has</li>
<li>passed</li>
</ul>
<script>
let elements = document.querySelectorAll('ul > li:last-child');
alert(element.innerHTML);
</script>
JAVASCRIPT IN A NUTSHELL
DOM e Eventos
▸ O funcionamento dos objetos
e códigos executados no
navegador, muitas vezes são
assíncronos
DOM e Eventos
▸ A função addEventListener()
relacionada a um dado elemento da
página (ex.: form, button, paragraph,
div) permite ficar "escutando"se um
dado evento ocorreu e depois chamar
uma função para tratar esse evento.
Função addEventListener()
JAVASCRIPT IN A NUTSHELL
DOM e Eventos
DOM e Eventos
▸ Como o evento ocorre de forma
assíncrona e dentro de uma
estrutura de tratamento de eventos
chamada
Bubbling and capturing do
DOM
▸ A função
event.preventDefault(),
cancela o evento naquele dado nó
do DOM, mas permite que ele se
propague para os nós superiores,
mantendo o bubbling
(propagação do evento) dos
eventos.
Função addEventListener()
Deixando mais claro as coisas
▸
preventDefault(): Cancela o comportamento padrão associado a um
evento. Por exemplo, evita que um link seja seguido ou que um
formulário seja enviado.
DOM e Eventos
▸ Para Saber mais sobre a manipulação do DOM através do
Javascript veja o material os seguintes tópicos do tutorial
interativo javascript.info:
▸ DOM Tree
▸ Walking DOM
▸ Node Properties
▸ Introduction to events
JAVASCRIPT IN A NUTSHELL
OBSERVAÇÃO
▸ Outra forma de tratar os eventos de um dado
elemento HTML é usando os atributos
on*(onde * define o nome do evento, como
onclick, onmouseup, onmouseover)
▸ Nesse caso, a chamada para a função de
tratamento ficará escrita diretamente no
HTML: < p onclick="soma();">
▸ É prático de usar mas mistura
muito o código Javascript com o
HTML e tornará a leitura do código
muito difícil.
Fonte:
https://escolakids.uol.com.br/portugues/ponto-de-exclamaca
o.htm
Exercício 1
▸ Crie uma aplicação HTML/JS que insira e remova dinamicamente novos
registros em uma tabela.
Exercício 2
▸ Altere o programa anterior para que quando o usuário clicar em adicionar
registro seja solicitado ao usuário a entrada dos valores da nova linha
(utilize a instrução prompt).
Exercício 3
▸ Ainda baseado-se nos exemplos anteriores, crie, em cada linha, um
botão de edição. Quando acionado, deverá ser aberto um prompt para o
usuário alterar o valor de nome e sobrenome da linha da tabela.
TEXTO
Javascript
Exercício
REFERÊNCIAS
▸ Life of a Pixel: fantástica apresentação de um membro da equipe do
Chromium sobre como o HTML é transformado em objetos gráficos na
tela do computador
▸ Life of a Script: palestra sobre o funcionamento da V8
▸ How Javascript Works: Under the Hood of the V8 Engine : artigo sobre a
arquitetura e funcionamento da V8
▸ Everything You Need To Know About Node.js Architecture : ótimo artigo de
Chintar For sobre a V8 e o Node.js
▸ Funções Anônimas Javascript: ótimo tutorial de uso de funções anônimas