Escolar Documentos
Profissional Documentos
Cultura Documentos
para Web
1-Autor
2
Sumário
1-Autor 2
2-Introdução 4
5. Referências Bibliográficas 51
3
2-Introdução
Bons Estudos!
4
3 - 1° Capítulo - Introdução ao Javascript.
Também chamada de JS, é a linguagem de criação de scripts para a Web, é utilizada por bilhões de
páginas para adicionar funcionalidades, verificar formulários, comunicar com servidores, e tudo
relacionado a scripts características da usabilidade com o usuário.
Originalmente criada na Netscape por Brendam Eich em 1994, a Microsoft tem o Visual Basic com
linguagem similar de scripts. A Java da empresa Sun surge então como potencial e desenvolve o
Javascript para programadores não profissionais.
Java e Javascript são linguagens distintas e completamente desconexas. JavaScript não permite a
criação de applets nem de aplicativos. JavaScript reside dentro de documentos HTML e pode prover
diferentes níveis de interatividades não suportados pelo HTML sozinho. As diferenças chaves em relação
ao Java:
- Java é uma linguagem de programação;
- JavaScript é uma linguagem de script;
- Aplicativos Java são executados pela máquina virtual Java;
- Scripts JavaScript são executados pelos browsers;
- Java é compilado;
- JavaScript é texto puro;
- Cada tecnologia requer um plug-in diferente.
- Altere o script:
<script>
Document.write(“<h2>”+document.title+”</h2>”);
</script>
8
4 - 2° Capítulo – Linguagem JavaScript.
<html>
<body>
<a href="http://www.artifice.web.pt/" target="_blank"
onclick="alert('Obrigado por visitar o Artífice da Web!')">
visite o Artífice da Web</a>
</body>
</html>
Certamente já conhece bem o atributo href="...", que serve para especificar o URL da página
a que a ligação de hipertexto conduz, mas note que o atributo onclick="..." é bem diferente porque
o seu conteúdo é constituído por código JavaScript, que neste caso faz aparecer a caixa de
diálogo com a mensagem de agradecimento.
Durante este modulo de JavaScript, procure organizar as pastas onde estará os exemplos.
Dentro da pasta Documentos do seu computador, crie uma pasta chamada: javascript e dentro
desta pasta principal, crie outras duas: desafios e exercícios
Dentro da pasta exercícios, crie uma subpasta chamada ex001 e nesta pasta, crie um
arquivo no VS Code, chamado: index.html.
Vamos ao código:
10
Na recomendação atual, os scripts JS devem ser incluídos no final do corpo do documento
HTML, posicionando a tag <script></script> logo acima do fechamento da tag </body>. Sendo
que tudo aquilo que estiver dentro da tag de script será considerado automaticamente JavaScript
pelo seu navegador.
Perceba que dentro do comando acima que você digitou: windows.alert(‘Olá, Mundo!’), a
palavra windows (opctional) é um objeto que indica referência à janela atual do navegador. A
palavra alert() é um método capaz de disparar uma mini janela de alerta para avisar algo ao
usuário.
Dentro dos parênteses do método alert(), temos uma string entre aspas (que podem ser
‘aspas simples’, “aspas duplas” ou `crases´ para delimitar as palavras que efetivamente
aparecerão na janela de alerta.
Para executar o script, basta navegar até a pasta onde o documento está salvo:
Documentos/javascript/exercícios/ex001/, clique com o botão direito do mouse sobre o arquivo
index.html e escolha a opção: Abrir com o Google Chrome. Tenha certeza de ter digitado o
código acima corretamente, em caso de não aparecer a mensagem juntamente com o botão OK,
faça a revisão do seu código novamente.
Comentários e blocos de código
Comentários
Os comentários permitem-nos descrever o código JavaScript que produzimos tornando-o
mais legível e mais fácil de manter. Se comentar adequadamente o código que produz, quando
mais tarde precisar de o melhorar ou fazer alterações será mais fácil e rápido perceber o que fez
antes. Se produz código para partilhar com outras pessoas então os comentários são ainda mais
importantes para que os outros percebam aquilo que escreveu.
Em JavaScript podemos usar comentários com uma única linha e comentários com várias
linhas. Os comentários com uma única linha começam com os caracteres //. Isto dá ao
interpretador de JavaScript a indicação de que o resto da linha é um comentário, pelo que este
ignora o resto da linha, continuando a interpretar o código na linha seguinte.
Um comentário que se estende por várias linhas começa com a sequência de caracteres /* e
continua até ser encontrada a sequência de caracteres */, que marcam o fim do comentário.
Ao encontrar a sequência /* o interpretador de JavaScript procura imediatamente a
sequência de fecho */, continuando aí a interpretação do código e ignorando o que está no meio.
11
Aqui ficam alguns exemplos de comentários em JavaScript.
// Este é um comentário com uma única linha
/* Este comentário ocupa uma só linha, mas podia ocupar mais */
/*
Este comentário ocupa várias linhas. Tudo o que for
escrito aqui dentro será ignorado pelo interpretador
de JavaScript
*/
Blocos de código
Quando temos de executar funcionalidades não triviais é quase sempre preciso executar
sequências de instruções compostas por várias linhas. Se essas sequências tiverem de ser
executadas condicionalmente (veja por exemplo a descrição da instrução if mais à frente), ou se
formarem uma função, então elas constituem um bloco e têm de ser agrupadas. Isso consegue-
se colocando-as entre chaves ({ }.)
{ // isto é um bloco de código
var i = 0;
var j = i * 3;
Variáveis
O que são as Variáveis?
As variáveis são objetos que servem para guardar informação. Elas permitem-nos dar
nomes a cada um dos fragmentos de informação com que temos de lidar. Se esses nomes forem
bem escolhidos fica fácil saber onde é que se deve guardar um determinado pedaço de
informação e onde é que se pode ir buscar a informação que se guardou antes. Para evitar erros
e aumentar a produtividade é importante escolher nomes que descrevam aquilo que que cada
variável guarda.
Assim, se escrevermos um programa que divide dois números é acertado chamar dividendo,
divisor e quociente aos números envolvidos na operação.
Escolhas como por exemplo n1, n2 e n3, apesar de funcionarem, provocam confusão e dão
origem a erros difíceis de detectar porque tornam o código mais difícil de ler.
É importante que saibamos quais as regras que temos de respeitar quando escolhemos um
12
nome para uma variável:
• Todos os nomes têm de começar com uma letra ou com o carácter _.
• Os restantes caracteres que compõem o nome podem igualmente conter números. Nunca se
esqueça que para o JavaScript letra grande e letra pequena são coisas diferentes e que, por
exemplo, as variáveis variavel1, Variavel1 e vaRiavel1 são três objetos distintos.
Olha este exemplo, de interação com um botão pelo navegador:
Crie uma pasta chamada ex002 dentro da pasta exercícios, em seguida como realizado
anteriormente, crie um arquivo index.html e desenvolva o código abaixo:
Declaração de Variáveis
Olhe com atenção a linha 14, onde criamos o botão. Existe um parâmetro na tag <button> que é o
onclick. Note que dentro das aspas eu coloquei o nome de um evento que será tratado pelo
JavaScript. A ligação entre o HTML e o JS será pelo nome desse evento (não esqueça dos
parênteses no final, mais tarde você entenderá pra que eles servem).
Agora analise a linha 16. Ela é exatamente a definição da função que tratará do evento. Ao
contrário, o window.alert() não está sozinho dentro do <script>. Ele está justamente dentro da
função (identificada pela palavra function do JS).
Toda função em JS é relacionada a um bloco, que nada mais é do que um conjunto de
comandos que estão entre chaves { }. Tudo o que estiver entre chaves em JS, chamaremos de
bloco.
13
Sendo assim, o comando que está na linha 17 não vai executar assim que a página for
carregada. No lugar disso, ela será executada só quando a função será disparada, e o modo de
disparo nesse caso será feito na linha 14, pelo evento onclick do botão.
A linha 17 tem o método window.prompt(), que gera uma solicitação para que o usuário
digite o seu nome. Essa janela se parece bastante com um alerta, mas tem a diferença de incluir
uma caixa disponível para aceitar a digitação.
Mas como vamos guardar o nome do visitante? Aí entra o início da linha 17. A instrução let
nome serve para declarar uma variável chamada nome, que vai guardar o nome que a pessoa vai
digitar. Em JavaScript, o símbolo de = não se lê como “igual”. Na verdade, sempre que você
14
encontrar um =, leia como “recebe”. Lendo então a linha 17 depois de aprender tudo isso, ficamos
com: let nome = window.prompt('Qual é seu nome?’) “A variável nome vai receber o resultado de
um prompt que vai aparecer na janela perguntando qual é o nome do usuário”.
Já na linha 18, temos também uma novidade. Note que dentro do alert(), usamos crases
para delimitar a string dessa vez. window.alert(`Olá, ${nome}! É um prazer te conhecer!`) Uma
string que está entre crases tem um nome especial: se chama template string. Esse tipo de string
é uma das novidades do ECMAScript.
Dentro de uma template string podemos usar placeholders no seu interior. Um placeholder é
representado pelos símbolos ${} e podem ser usados para facilitar a exibição de conteúdos de
variáveis ou expressões. Olhando a linha 18, perceba que ${nome} vai ser substituído pelo
conteúdo da variável nome, criada na linha 17 e que está guardando o nome da pessoa que está
rodando o script.
Ao criar uma variável dá-se o nome de declaração. As variáveis que são declaradas fora de
qualquer função (mais à frente iremos ver exemplos de declarações de variáveis e o que são
funções) são designadas por variáveis globais. Aqui o termo global significa que a variável em
causa pode ser utilizada em qualquer parte do script; ela está permanentemente acessível.
Quando uma variável é declarada dentro de uma função ela será uma variável local porque só
pode ser utilizada dentro dessa função.
Se tentarmos aceder a uma variável local fora da função em que ela foi declarada será
gerado um erro porque a variável só existe no universo da função em que foi declarada; ela não
faz parte do mundo exterior a essa função e como tal não pode ser aí utilizada.
A seguir temos alguns exemplos de declaração de variáveis:
dividendo = 12;
divisor = 3;
sabor = "Doce";
pi = 3.14159;
Nestes exemplos todas as variáveis declaradas serão variáveis globais. Se quisermos
declarar variáveis cuja existência se limite a uma pequena secção do código teremos de usar
a declaração var, assim: var dividendo = 12;
Se usarmos esta declaração fora de qualquer função então, porque a variável é declarada
na base da estrutura de código, ela será global.
15
Temos assim que a declaração var serve para limitar o contexto em que a variável existe e
que:
• As variáveis declaradas sem a declaração var são variáveis globais;
• As variáveis declaradas usando a declaração var existem apenas no contexto
em que foram definidas.
Antes de começar a escrever código em JavaScript é importante planear o modo como este
será organizado. Deve-se começar por identificar os dados que vão ser utilizados. A seguir
escolhem-se os nomes das variáveis que vão guardar esses dados e só depois é que se começa
a escrever o código propriamente dito.
Conversões de Valores
A linguagem JavaScript exige muito pouco trabalho ao programador para definir o tipo de
dados que uma variável deve guardar. É o próprio interpretador de JavaScript que em função
dos dados que recebe decide se estes representam um número, texto (string), um valor
lógico, ou nada (null). Assim, se escrever:
var resposta = 42;
o interpretador decidirá guardar internamente a variável resposta como um número inteiro,
mas se escrevermos:
var resposta = 42;
resposta = "O JavaScript aprende muito depressa.";
ao chegar à segunda linha de código o interpretador mudará de ideias e a variável resposta
deixará de ser guardada internamente como um número inteiro para passar a ser guardada como
16
uma String (texto). Esta conversão no tipo da variável acontece de forma automática e o
programador não precisa de fazer nada para que ela aconteça.
Esta liberdade que nos é dada pelo JavaScript destina-se apenas a simplificar a escrita do
código. Quando é mal utilizada ela pode dar origem a código difícil de ler e a erros. As regras de
boa programação dizem que ao definir uma variável o programador deve decidir qual o tipo de
dados (número, texto ou valor lógico) que está irá conter e não deverá escrever código que
provoque uma conversão no tipo de dados que a variável guarda. Sempre que uma tal conversão
for necessária deverá ser definida uma nova variável para guardar o resultado da conversão,
mantendo inalterados os tipos das variáveis antigas. Na prática esta recomendação raramente é
seguida.
Expressões Literais
Representação de valores
As expressões literais representam valores fixos. Elas são escritas diretamente pelo
programador ao produzir o script. Exemplos de expressões literais podem ser: 123 ou "Isto é uma
expressão literal".
As expressões literais podem ser usadas de diversas maneiras, como ilustra o excerto de
código apresentado a seguir (o exemplo seguinte usa as instruções if/else que só são estudadas
mais à frente):
var nome = "visitante";
var hora = 11;
if(hora < 12)
document.write("Bom dia. Seja bem vindo senhor " + nome);
else
{ if(hora >= 13)
document.write("Boa tarde. Seja bem vindo senhor " + nome);
else
document.write("Seja bem vindo! Almoça conosco?");
}
Na primeira linha usamos a expressão literal "visitante" para dar um valor inicial à variável nome.
Na segunda linha usámos uma expressão literal numérica para dar um valor à variável hora.
17
O resto do código usa as expressões literais 12 e 13 para determinar a parte do dia (manhã,
tarde ou hora de almoço) e cumprimentar usando o texto (expressão literal) mais adequado.
Números inteiros
Os números inteiros podem ser expressos na forma decimal (base 10), hexadecimal (base
16) ou octal (base 8). Um número decimal consiste numa sequência de dígitos que nunca deve
começar por 0 (zero). Se escrevermos um número com um zero no início isso significa que se
trata de um número escrito na forma octal. Por outro lado, se no início escrevermos os caracteres
0x (ou 0X) isso significa que o número está escrito na forma hexadecimal. Os números escritos
na forma decimal podem conter os dígitos (0-9), a forma octal aceita apenas dígitos de (0-7) e a
forma hexadecimal aceita os dígitos (0-9) mais as letras a-f e A-F.
Exemplos de números inteiros são: 42, 052, 0X2A, que representam todos o valor decimal
42. No exemplo seguinte as variáveis i, j, k possuem todas o mesmo valor, apesar de serem
usadas bases diferentes para as inicializar:
var i = 42; // decimal
var j = 052; // octal
var k = 0X2A; // hexadecimal
// quando executar este código repare que as variáveis
// têm todas o mesmo valor
document.write("i = " + i);
document.write("<br/>");
document.write("j = " + j);
document.write("<br/>");
document.write("k = " + k);
Expressões de texto
Uma expressão de texto é composta zero ou mais caracteres colocados entre aspas ("),
como por exemplo "esta é uma expressão de texto", ou entre aspas simples ('), como por
exemplo 'esta é outra expressão de texto'. Se começarmos a expressão com aspas temos de
usar aspas para a terminar, e se a iniciarmos com aspas simples temos de usar outra aspas
simples para terminar.
Para além dos caracteres normais, as expressões de texto podem conter os caracteres
especiais apresentados na lista seguinte:
Caracter Significado
\b backspace
\f form feed
\n new line
\r carriage return
\t tab
\\ backslash
Cada um destes caracteres produz o mesmo resultado que se obtém carregando na tecla
indicada na segunda coluna. Assim o carácter \b equivale a carregar na tecla backspace (apagar
o caracter à esquerda). O carácter \n provoca uma mudança de linha tal como a tecla "enter". O
caracter \ é usado como prefixo dos outros caracteres especiais, o que faz também dele um
caracter especial. Por isso, para obtermos este carácter temos de temos escrevê-lo duas vezes
(\\). Se o escrevermos uma única vez em lugar de o obtermos estaremos a tentar introduzir um
outro caracter especial e o resultado será diferente do que pretendemos.
19
Caracteres de escape
Se o caracter que vem a seguir a \ não pertencer à lista anterior o seu efeito será nulo, mas
há duas excepções: as aspas (") e aspas simples ('). Se pretendermos escrever aspas dentro de
uma expressão de texto temos de colocar o carácter \ antes delas, como mostra o exemplo
seguinte:
var texto = "Ele leu o \"Auto da Barca do Inferno\" de Gil Vicente.";
document.write(texto);
O resultado será:
Ele leu o "Auto da Barca do Inferno" de Gil Vicente.
Se em vez de aspas usarmos apenas aspas simples teremos:
var texto = 'Ele leu o \'Auto da Barca do Inferno\' de Gil Vicente.';
document.write(texto);
O resultado será:
Ele leu o 'Auto da Barca do Inferno' de Gil Vicente.
Porém, a melhor solução para este problema não é nenhuma das anteriores. Se usarmos
aspas simples como caracteres delimitadores de uma string então passamos a poder usar as
aspas
como parte do conteúdo sem qualquer problema, como se mostra a seguir:
var texto = 'Ele leu o "Auto da Barca do Inferno" de Gil Vicente.';
document.write(texto);
Mas se quisermos colocar aspas simples no conteúdo a melhor forma de evitarmos os
problemas consiste em usar aspas como caracteres delimitadores da string, como se mostra a
seguir:
var texto = "Ele leu o 'Auto da Barca do Inferno' de Gil Vicente.";
document.write(texto);
Se atribuirmos um valor a um elemento do array com um índice mais alto do que o seu
comprimento, o sistema JavaScript resolve o problema aumentando o tamanho do array até
chegar ao índice pretendido. É isso que acontece no exemplo anterior quando se chega à linha
que tem sortido[6] = "Caderno"; Os arrays são objetos, e entre as suas propriedades conta-se a
propriedade length, que nos dá o número de elementos (variáveis) que ele contém num
determinado momento.
Assim, se ao exemplo anterior juntarmos uma linha com o seguinte código:
var numeroDeElementos = sortido.length; a variável numeroDeElementos ficará com o valor 7
(repare que inserimos um elemento adicional com o índice 6, o que fez crescer o array). De forma
análoga se usarmos frutas_nacionais.length iremos obter 3.
Operadores
A linguagem JavaScript possui muitos operadores de diversos tipos. Aqui iremos apenas
21
abordar os aspectos mais básicos dos operadores disponíveis.
Operadores de comparação
Um operador de comparação compara os valores que lhe são fornecidos (que designamos
por operandos) e retorna um valor lógico que indica se o resultado da comparação é verdadeiro
ou falso. Os valores que recebe para analisar podem ser números ou variáveis de texto (string).
Quando atuam sobre variáveis de texto, as comparações baseiam-se na forma como os
caracteres estão ordenados sequencialmente. Esta ordenação baseia-se na ordem alfabética. A
lista seguinte apresenta estes operadores.
22
(!=) Verifica se os operandos são desiguais x!=y dá true se x não for igual a y Maior do que (>)
Verifica se o operando da esquerda é maior do que o da direita
x>y dá true se x for maior
do que y
Maior ou igual
(>=)
Verifica se o operando da esquerda é maior
ou igual ao da direita
x>=y dá true se x for maior
ou igual a y
Menor do que (<) Verifica se o operando da esquerda é menor
do que o da direita
x<y dá true se x for menor
do que y
Menor ou igual
(<=)
verifica se o operando da esquerda é menor
ou igual ao da direita
x<=y dá true se x for menor
ou igual a y
Operadores aritméticos
Um operador aritmético recebe valores numéricos (tanto variáveis como expressões literais)
e produz um valor numérico como resultado. Os operadores numéricos mais importantes são a
adição (+), a subtração (-), a multiplicação (*), a divisão (/) e o resto da divisão (%). O
funcionamento destes operadores em JavaScript respeita todas as regras da álgebra.
Porque é muitas vezes necessário adicionar ou subtrair uma unidade a uma variável, a
linguagem JavaScript define dois operadores especiais com esta finalidade. Assim, para
adicionarmos uma unidade à variável variavel1 podemos escrever variavel1++, e para
subtrairmos uma unidade à variavel2 escrevemos variavel2--. Por ação destes operadores no
final do exemplo seguinte a variável variavel1 terá o valor 4 e a variável
variavel2 terá o valor 6.
23
var variavel1 = 3;
variavel1++;
var variavel2 = 7;
variavel2--;
Operadores lógicos
Os operadores lógicos aceitam os valores lógicos true e false (verdadeiro e falso) como
operandos e retornam valores lógicos como resultado. Os operadores lógicos base encontram-se
listados a seguir (os restantes definem-se com base nestes três.)
Objetos
A linguagem JavaScript é uma implementação do padrão ECMAScript. Esse padrão define
as regras de sintaxe que temos estado a estudar e um conjunto mínimo de objetos que fazem do
ECMAScript uma verdadeira linguagem de programação, mas não define os objetos que
24
permitem manipular e interagir tanto com o browser como com as páginas da Web. Para ser
verdadeiramente útil o JavaScript tem de complementar o ECMAScript com objetos adicionais.
Laço for
Um ciclo for consiste num conjunto de três expressões contidas entre parêntesis, separadas
pelo caracter ; (ponto e vírgula) e pelo código a executar em cada um dos ciclos.
Normalmente esse código estará contido entre chaves para formar um bloco, mas se
consistir numa única linha não é preciso usar chaves.
A primeira das expressões do ciclo for declara a variável a usar como índice (funciona
apenas como contador) e inicializa-a. A segunda expressão declara uma condição que deve ser
testada sempre que se inicia um novo ciclo. Se essa condição der false como resultado o ciclo
27
para e o código definido abaixo não voltará a ser executado. A terceira expressão serve para
atualizar o valor do índice no final de cada ciclo.
Ilustremos isto com um exemplo simples:
soma = 0;
for(var i = 0; i < 3; i++)
{ soma += i;
document.write("O valor do índice é agora de " + i + "<br/>");
}
Este pedaço de código começa por definir uma variável (global) chamada soma atribuindo-
lhe
o valor zero. O ciclo for define uma variável de índice (var i = 0) e verifica se a condição i < 3 é
cumprida. Se o resultado da verificação for true será executado o código que se encontra entre
chaves mais abaixo, o qual adiciona i à variável soma e apresenta uma mensagem informando
sobre o valor atual da variável i. Depois é executada a terceira instrução do ciclo (i++), a qual
soma uma unidade ao valor do índice i e dá-se início a um novo ciclo. Este começa por testar de
novo o respeito pela condição i < 3.
Se o resultado for true volta a executar o código que está entre chavetas com o valor atualizado
de i. Isto repete-se até que i < 3 dê false, o que termina a execução do ciclo for.
O exemplo seguinte é mais elaborado e executa um ciclo que percorre todos os elementos
de
um array de nomes e destaca aqueles que começam com a letra H.
var nomes = new Array("Manuel", "Rita", "Joana", "Francisco", "Luís",
"Bernardo", "Helder", "Patrícia", "Hugo", "António", "Nuno");
for(var i=0; i < nomes.length;i++)
{
var nome = nomes[i]
if(nome.charAt(0) == "H")
alert("O nome " + nome + " começa com a letra H");
}
Neste exemplo usamos o método charAt() do objeto String para verificar se o carácter inicial do
nome (aquele está na posição zero) é igual à letra H.
28
Laço while
O ciclo while é muito parecido com o ciclo for. De fato tudo o que um faz pode ser feito com
o outro, embora por questões de legibilidade (e de elegância do código) cada um deles possa ter
áreas de aplicação que para as quais é mais indicado do que o outro.
O ciclo while avalia uma condição e se ela der true executa o bloco de código que vem
imediatamente a seguir. Se der false salta para a frente do bloco de código que vem a seguir sem
o executar.
Este exemplo usa um ciclo while para produzir o mesmo efeito que o exemplo que está
antes daquele que acabámos de ver:
soma = 0;
i = 0;
while(i < 3)
{
soma += i;
document.write("O valor da variável i é agora de " + i + "<br/>");
i++;
}
Funções
Funções possuem um papel muito importante na programação estrutural pelo fato de ajudar muito
na modularização no programa, ou seja, viabiliza a divisão do programa em partes menores e
logicamente relacionadas. Em JavaScript, existem diversas maneiras de se declarar uma função;
mostraremos todas elas aqui com exemplos.
Um ponto importante é que em JavaScript as funções são consideradas como dados, ou
seja, podemos atribuir uma função a uma variável ou propriedade de um objeto e a partir desde
momento usar a variável ou a propriedade da mesma forma que se usaria a função. Elas também
podem ser passadas como argumentos para outras funções e por isso funções de JavaScript são
chamadas funções de alta ordem, elas podem tanto receber funções como argumento quanto
retornar uma função.
Expressão function: A primeira maneira de se declarar uma função é através do uso da
palavra chave function de maneira similar a como elas são declaradas na linguagem C, com as
29
diferenças de que em JavaScript não definimos o tipo de retorno e nem mesmo o tipo dos
argumentos. Uma função complexa pode ser capaz de tratar argumentos diferentes e retornar
argumentos diferentes dependendo das circunstâncias nas quais foi invocada. Deve-se definir
seu nome e seus argumentos conforme mostra o exemplo a seguir.
Exemplo:
function incArray(array,valor) {
for(item in array) { array[item]+=valor;
}
return array;
}
// Para invocar essa função depois basta usar incArray(arg1,arg2)
O construtor Function() A segunda forma de se declarar uma função é utilizando o
construtor Function() e o operador new, pois em JavaScript funções e objetos são interligados.
Exemplo:
var areaTri = new Function("b","h","return (b*h)/2;");
// a função acima calcula a área de um triângulo dadas sua base
// altura. Para invocá-la basta usar areaTri(arg1,arg2)
Esse construtor aceita um número qualquer de strings como argumentos. O último
argumento será sempre o corpo da função contendo comandos separados por ponto-e-vírgula
normalmente e todos os outros argumentos do construtor serão considerados argumentos da
função que se está criando. Devido a sua estrutura, essa forma de se declarar funções costuma
ser mais usada quando precisamos declarar uma função pequena, ocupando apenas uma linha.
Métodos: No paradigma de orientação a objetos, os métodos são simplesmente funções que são
invocadas por meio de um objeto! E em JavaScript isso é levado tão a sério que a maneira de se
criar métodos para seus objetos leva isso ao pé da letra. Basta criarmos uma função e atribuí-la a
uma propriedade do objeto.
Exemplo: // Uma função fictícia para cálculo de um consumo de combustível
function calc_consumo(distancia) {
return distancia/(15/this.motor);
}
// Agora atribuímos a função, sem os argumentos, para a
// propriedade consumo. Considerando o objeto já instanciado
// do exemplo anterior car.consumo = calc_consumo;
// Pronto! já podemos invocá-la fazendo:
var gas = car.consumo(200);
// calculando quanto o carro gastaria de
// combustível em 200 kilômetros
Também podemos definir os métodos dentro do próprio construtor de uma função, tanto
definindo a função fora e atribuindo no construtor, como definindo a própria função dentro do
próprio construtor uma vez que JavaScript suporta o aninhamento de funções.
Arrays Associativos: Para finalizar nossa discussão sobre objetos, vamos mostrar como eles
podem ser usados como arrays associativos, ou seja, um array com objetos indexados por
33
valores não numéricos. Isso só pode ser feito porque é possível acessarmos atributos de um
objeto usando MeuObjeto["atributo"]. Assim podemos simular o comportamento de um array
associativo armazenando cada item em um atributo.
Exemplo:
var arr = new Object();
arr["nome"] = "Zaphod Beeblebrox";
arr["cargo"] = "Presidente do Universo";
window.alert(arr["nome"]);
// Irá mostrar uma mensagem contendo:
// "Zaphod Beeblebrox"
// Note que não há nenhuma diferença se fizermos:
window.alert(arr.nome)
// Exceto que a string usada como índice no modo [ ]
// pode ser manipulada em tempo de execução
Eventos
Existem diversos eventos que podem ser utilizados para que a interação do usuário coma
página seja o ponto de disparo de funções que alteram os elementos da própria página:
• onclick: clica com o mouse
• ondblclick: clica duas vezes com o mouse
• onmousemove: mexe o mouse
• onmousedown: aperta o botão do mouse
• onmouseup: solta o botão do mouse (útil com os dois acima para gerenciar drag’n’drop)
• onkeypress: ao pressionar e soltar uma tecla
• onkeydown: ao pressionar uma tecla.
• onkeyup: ao soltar uma tecla. Mesmo acima.
• onblur: quando um elemento perde foco
• onfocus: quando um elemento ganha foco
• onchange: quando um input, select ou textarea tem seu valor alterado
• onload: quando a página é carregada
• onunload: quando a página é fechada
• onsubmit: disparado antes de submeter o formulário. Útil para realizar validações
34
Vamos construir um exemplo prático: crie uma pasta 004 dentro da pasta exercícios,
conforme recomendado no início deste material.
Ao criar o arquivo index.html nas pastas, desenvolva o seguinte código:
Olhemos atentamente nas linhas de 11 a 13, onde criei uma seção identificada como
resultado, com um parágrafo interno. Ele será o nosso elemento mais importante desse exercício.
Identificar os elementos que desejamos acessar via script é essencial para evitar dores de
cabeça futuros. Quando identificamos o com o nome resultado, deixamos as “portas abertas” para
o JavaScript entrar. Agora, para resolver esse exercício, vamos criar o método de resposta ao
evento onclick do botão. Monte uma tag <script> </script>na linha 14, logo depois do </section>
e escreva o código a seguir.
Dentro do script, entre as linhas 15 e 19, criamos a função inicio() e um bloco com {}. Dentro
declaramos duas variáveis: nome e res. A variável nome vai receber o resultado de um prompt().
35
A grande novidade aqui foi a linha 17. É nela onde vamos focar nossos esforços agora.
Iniciando a linha, usamos a instrução let que vai criar uma variável chamada res (na verdade, o
que é criado é um objeto. Mas por enquanto pense em um objeto como uma variável especial). O
objeto res será o nosso elo entre o JavaScript e o HTML. Lembra da linha 11 do código HTML?
Lá eu dei um id para o elemento section e agora vou tirar proveito disso. Só segue a linha 17 e
tenta ler em Português: “Na janela do navegador (window), dentro do documento atual
(document), pegue o elemento que tenha o id (getElementById) com o nome ‘resultado’.” É
exatamente isso que você leu! A partir de agora, tudo aquilo que eu fizer com o objeto res em
JavaScript, vai se refletir o objeto que tenha o id citado no código. Nesse código, se mexermos
com res, vamos afetar diretamente a do nosso documento HTML. Agora vamos olhar com
atenção para a linha 18 do código acima. Ela vai modificar o “HTML que está dentro” (innerHTML)
da section. Dá só uma olhada na linha 12 do nosso código HTML. Esse é o parágrafo que vai
aparecer no navegador quando abrirmos o index.html. Porém, a linha 18 vai mudar esse
parágrafo quando o botão da linha 10 for clicado.
Funções Temporais
Em JavaScript, podemos criar um timer para executar um trecho de código após um certo
tempo, ou ainda executar algo de tempos em tempos.
A função setTimeout permite que agendemos alguma função para execução no futuro e
recebe o nome da função a ser executada e o número de milissegundos a esperar:
// executa a minhaFuncao daqui um segundo
setTimeout(minhaFuncao, 1000);
Note que nas linhas de 11 até 14, criamos quatro botões diferentes e que cada um dispara
uma ação diferente e não uma única funcionalidade. Outra coisa que estamos fazendo pela
primeira vez é a linha 18. Com ela, estamos evitando colocar um código JavaScript dentro de um
arquivo HTML. Dessa maneira, nosso código fica muito mais enxuto e organizado, já que
estamos separando o que é HTML do que é JS. Ao digitar a linha 18, segure a tecla Ctrl e clique
sobre o nome do arquivo acoes.js (que até o momento não existe). Ao fazer isso, disparamos um
pedido ao VS Code para que ele crie o arquivo automaticamente!
No documento acoes.js que criamos, escreva apenas o código das funções.
37
Se você analisar o código acima com cuidado, a linha 2 está se repetindo várias vezes nas
linhas 7, 12 e 17. Até o momento, isso é necessário porque toda função tem um bloco (delimitado
por {}) e toda variável declarada dentro de um bloco só vai funcionar dentro desse bloco. O nome
que damos a essa característica é ESCOPO. De forma resumida, o escopo de uma variável é a
área onde ela existe e funciona (o que chamamos de escopo local). Na imagem acima, marquei o
escopo da variável resp que está dentro da function acao1(). A minha variável resp do acao1()
não vai funcionar fora daquela linha pontilhada. Por isso tivemos que criar várias versões da
mesma variável, cada uma dentro de cada ação. Porém, essa não é a melhor maneira de resolver
esse problema. Vamos ver uma nova versão, bem melhor.
Olha só o que aconteceu! Transferi a linha que declara a variável resp para fora das
funções, lá no início, na linha imediatamente acima da primeira (não pode ser no final). Agora
estamos dizendo ao JS que a variável criada tem escopo global, o que significa que ela vai
funcionar dentro de todas as funções, é só olhar a nova linha pontilhada do segundo caso.
Outra característica do código acima é o seu comportamento dinâmico. Conforme você usa
o site e vai clicando nos botões, ele vai adicionando conteúdo ao final da página sem apagar o
conteúdo anterior, que era o que estava acontecendo antes (veja na imagem ao lado). Isso tudo
está acontecendo, simplesmente porque estamos usando o operador += no lugar de usar o a
atribuição simples = nas linhas 4, 8, 12 e 16.
38
Pratique os exercícios abaixo, reescreva-os tentando assimilar o que cada linha faz
exatamente e compare com a teoria vista neste material.
1- Manipulando Números
<!DOCTYPE
html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Números com JS</title>
<style>
body { font: 12pt Arial; }
button { font-size: 12pt; padding: 30px; }
</style>
</head>
<body>
<h1>Trabalhando com números</h1>
<button onclick="calcular()">Clique para calcular</button>
<section id="res">
<p>O resultado vem aqui...</p>
</section>
<script>
// O que fica aqui fora vai executar automaticamente, SEMPRE que o site for
carregado
window.alert('Seja bem-vindo(a) ao meu site!')
// Já a função calcular() só vai executar quando o usuário pressionar o botão
function calcular() {
let n1 = Number(window.prompt('Digite um número: '))
let res = document.querySelector('section#res')
39
2- Somando dois números
<!DOCTYPE
html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Números com JS</title>
<style>
body { font: 12pt Arial; }
button { font-size: 12pt; padding: 30px; }
</style>
</head>
<body>
<h1>Somando dois números</h1>
<button onclick="somar()">Iniciar a soma</button>
<section id="res">
<p>O resultado vem aqui...</p>
</section>
<script>
function somar() {
let n1 = Number(window.prompt('Digite um número: '))
let n2 = Number(window.prompt('Digite outro número:'))
soma = n1 + n2
40
3- Calculando a média de um aluno.
<!DOCTYPE
html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Números com JS</title>
<style>
body { font: 12pt Arial; }
button { font-size: 12pt; padding: 30px; }
</style>
</head>
<body>
<h1>Média do aluno v1.0</h1>
<button onclick="media()">Calcular média</button>
<section id="situacao">
<p>O resultado vai aparecer aqui...</p>
</section>
<script>
function media() {
let nom = window.prompt('Qual é o nome do aluno?') // Já que o nome não é um
número e sim letras, não é preciso colocar Number() para fazer a covnersão
let n1 = Number(window.prompt(`Qual foi a primeira nota de ${nom}?`))
let n2 = Number(window.prompt(`Além de ${n1}, qual foi a outra nota de ${nom}?
`))
med = (n1 + n2)/2 // Se você não colocar os parênteses para forçar a
precedência, seu cálculo vai dar um resultado errado, já que a divisão será feita antes.
41
</script>
</body>
</html>
<script>
function calcular() {
let num = Number(window.prompt('Digite um número: '))
42
res.innerHTML += `<p>O valor de ${num}<sup>2</sup> é ${Math.pow(num, 2)}</p>`
res.innerHTML += `<p>O valor de ${num}<sup>3</sup> é ${Math.pow(num, 3)}</p>`
}
</script>
</body>
</html>
<script src="scripts.js"></script>
</body>
</html>
O segundo arquivo deve se chamar scripts.js e deve conter as seguintes linhas de códigos:
let
contado
r = 0
let res = document.querySelector('section#result')
// As variáveis declaradas aqui fora são consideradas GLOBAIS e funcionam dentro do
43
programa inteiro
function contar() {
contador ++ // É a mesma coisa que contador = contador + 1
res.innerHTML = `<p>O contador está com <mark>${contador}</mark> cliques.</p>`
}
function zerar() {
contador = 0
res.innerHTML = null
}
@import url('https://fonts.googleapis.com/css?family=Pacifico&display=swap');
44
function acao1() {
resp.innerHTML += '<p>Clicou no primeiro botão</p>'
}
function acao2() {
resp.innerHTML += '<p>Clicou no segundo botão</p>'
}
function acao3() {
resp.innerHTML += '<p>Clicou no terceiro botão</p>'
}
function acao4() {
resp.innerHTML += '<p>Clicou no quarto botão</p>'
}
45
<!-- No lugar de ter muitas linhas escritas dentro do seu documento HTML, use um
arquivo externo que vai fazer a carga das suas funções JS no final da página. Isso separa
o que é conteúdo (HTML) do que é funcionalidade (JS) -->
<script src="acoes.js"></script>
</body>
</html>
46
<section id="saida">
<p>Clique no botão acima para começar.</p>
</section>
<script src="script.js"></script>
</body>
</html>
47
saida.innerHTML += `<p>OPÇÃO INVÁLIDA! Você digitou ${n1} e ${n2}, mas não sei
o que fazer com eles. </p>`
break
}
}
48
<!-- O método GET envia os dados pela própria URL, durante a chamada -->
<label for="fnum">Valor final: </label>
<input type="number" name="num" id="fnum" placeholder="Apenas positivos">
<!-- O name de um objeto é mais usado por outras linguagens (como PHP), já o
ID será mais usado por nós em JavaScript -->
<input type="submit" value="Contar" formaction="javascript:contagem()">
<!-- Ao usar o FORMACTION, é preciso colocar javascript: antes do nome da
função -->
</form>
</section>
<section id="saida">
<p>Preencha os dados acima e aperte o botão.</p>
</section>
<script src="script.js"></script>
</body>
</html>
49
body { font: 12pt Arial; }
h1, h2, h3 { font-family:
'Pacifico', cursive; font-
weight: normal;}
input[type=number] { font-
size: 12pt; }
input[type=submit] {
background-color: green;
color: white;
font-size: 12pt;
padding: 5px;
}
50
5. Referências Bibliográficas
Básica:
https://github.com/gustavoguanabra/javascript.
- LAWSON, B.; SHARP, R. Introdução ao HTML 5. São Paulo: Alta Books, 2011.
51