JavaScript - Marx Gomes Van der Linden

Transcrição

JavaScript - Marx Gomes Van der Linden
JavaScript
Objetos e Arrays
Ferramentas para Internet
Marx Gomes Van der Linden
Objetos

Javascript define um tipo especial de variável
chamado Objeto.
Objetos não pertencem a classes
explicitamente definidas.
Um objeto em Javascript é uma associação de
múltiplos valores, organizados por nomes.




Tipo de dados especial que contém
conjuntos de dados de outros tipos.
Pode ser visto como um array associativo
ou lista associativa.
http://marx.vanderlinden.com.br/
2
Objetos como Listas Associativas


Uma lista associativa é análoga a um
dicionário.
A cada chave da lista, é associado um valor.

"Milho" → "Amarelo"

"Arroz" → "Branco"

"Limão" → "Verde
http://marx.vanderlinden.com.br/
3
Objetos como Listas Associativas


Para criar um objeto, basta associá-lo ao valor
{}.
Depois, podem-se associar valores
(propriedades) ao objeto usando a sintaxe:
var cores = {};
cores['milho'] = 'Amarelo';
cores['arroz'] = 'Branco';
cores['limao'] = 'Verde';
http://marx.vanderlinden.com.br/
4
Objetos como Listas Associativas

A mesma sintaxe é usada para recuperar os
elementos do objeto:
document.write(cores['milho']);
Saída:
Amarelo

http://marx.vanderlinden.com.br/
5
Objetos como Listas Associativas

A mesma variável pode, em diferentes
momentos, representar diferentes tipos de
valores, inclusive outros objetos.
var valor = {};
valor['teste'] = 385;
valor['blabla'] = 'Meu texto';
document.write(
valor['teste'] + "<br>\n" );
valor = 50.3;
document.write(valor);
385<br>
50.3
http://marx.vanderlinden.com.br/
6
Criando um Objeto

É possível criar todos as propriedades de um
objeto em uma única instrução:
var computers = {
'trs-80' : 'Radio Shack',
2600 : 'Atari',
'adam' : 'Coleco'
};
document.write(
computers['adam'] + ', ' +
computers[2600] );
Coleco, Atari
http://marx.vanderlinden.com.br/
7
Objetos

Para adicionar um novo elemento a um objeto
já existente, basta defini-lo:
var computers = {
'trs-80' : 'Radio Shack',
2600 : 'Atari', 'adam' : 'Coleco'
};
computers['mac'] = 'Apple';
document.write(computers['adam'] + ', '
+ computers[2600] + ', '
+ computers['mac'] );
Coleco, Atari, http://marx.vanderlinden.com.br/
Apple
8
Objetos



É possível utilizar uma sintaxe alternativa (mais
comum) para acessar alguns elementos de um
objeto.
objeto['nome'] → objeto.nome
'nome' deve seguir a convenção para
nomenclatura de variáveis:


Iniciar com letra
Não ter espaços ou caracteres especiais
http://marx.vanderlinden.com.br/
9
Objetos

Exemplos:
document.write( computers['mac'] ); // Apple
document.write( computers.mac );
// Apple
document.write( computers['2600']); // Atari
document.write( computers[2600]);
// Atari
document.write( computers.2600);
// Erro!
http://marx.vanderlinden.com.br/
10
Objetos
var sistemas = {
stallman : 'GNU',
'linus' : "Linux"
};
sistemas.apple = 'Mac OS X';
sistemas["microsoft"] = 'Windows';
document.write(
sistemas['stallman'] + " " );
document.write(sistemas.linus + " ");
document.write(sistemas.microsoft + " ");
document.write(sistemas["apple"]);
GNU Linux Windowshttp://marx.vanderlinden.com.br/
Mac OS X
11
for/in



A estrutura de controle for/in serve para
percorrer todas as propriedades de um objeto,
mesmo que não se conheça seus nomes.
Sintaxe:
for(tmpvar in objeto)


Percorre o objeto X vezes, onde X = número
de propriedades do objeto.
A cada iteração, assumem os valores:
 tmpvar → nome da propriedade atual
 objeto[tmpvar] → valor da
http://marx.vanderlinden.com.br/
12
propriedade atual
for/in
var sistemas = {
stallman : 'GNU',
'linus' : "Linux"
};
sistemas.apple = 'Mac OS X';
sistemas["microsoft"] = 'Windows';
for (var x in sistemas) {
document.write(
x + ': ' + sistemas[x] + ' | '
);
}
stallman: GNU | linus:
Linux | apple: Mac OS
http://marx.vanderlinden.com.br/
13
X | microsoft: Windows |
Atenção:
var sistemas = {
stallman : 'GNU',
'linus' : "Linux"
};
sistemas.apple = 'Mac OS X';
sistemas["microsoft"] = 'Windows';
for (var x in sistemas) {
document.write(
x + ': ' + sistemas.x + ' | '
);
Erro!
}
stallman: GNU | linus:
Linux | apple: Mac OS
http://marx.vanderlinden.com.br/
14
X | microsoft: Windows |
Objetos

Um objeto pode ter outros objetos como
membros:
var comp = {};
comp.mac = {};
comp.mac.sistema = "Mac OS X";
comp.mac.fabricante = "Apple";
comp.winpc = {}
comp.winpc.sistema = "Windows";
comp.winpc.fabricante = "Microsoft";
http://marx.vanderlinden.com.br/
15
Objetos
for(tipo in comp){
document.write("<h1>" + tipo +
"</h2><ul>");
for(prop in comp[tipo])
document.write("<li><em>" +
prop + "</em>: " +
comp[tipo][prop] + "</li>"
);
document.write("</ul>");
http://marx.vanderlinden.com.br/
16
Objetos
http://marx.vanderlinden.com.br/
17
Arrays



Um objeto pode ser tratado como um array,
que armazena uma lista seqüencial de valores.
Os elementos de um array podem ser de
qualquer tipo.
Para criar um objeto como um array, basta usar
a sintaxe []:
var vazio = [];
var primos = [2, 3, 5, 7, 11];
var outros = [ 1.1, true, "a" ];
http://marx.vanderlinden.com.br/
18
Arrays




Os elementos de um array são acessados
pelos seus índices, que são números inteiros.
O primeiro elemento tem índice 0.
O último índice é sempre N-1, onde N é o
número de elementos do array.
Não há necessidade de se preocupar com
alocação de espaço.
http://marx.vanderlinden.com.br/
19
Arrays

A sintaxe [] também para recuperar
elementos do array, a partir do índice.
var pratos = ['Pizza', 'Chocolate',
'Lasanha', 'Feijoada'];
document.write(
"Eu quero " + pratos[2] + " com " +
pratos[3] + "."
);
Eu quero Lasanha com Feijoada.
http://marx.vanderlinden.com.br/
20
Tamanho do array

Todo array tem uma propriedade length, que
armazena o seu tamanho.
var pratos = ['Pizza', 'Chocolate',
'Lasanha', 'Feijoada'];
document.write(
"Eu quero " + pratos.length + " pratos: ");
for(var i=0; i<pratos.length; i++)
document.write(pratos[i] + ' ');
Eu quero 4 pratos: Pizza Chocolate Lasanha
http://marx.vanderlinden.com.br/
21
Feijoada
Exibindo o array

Também é possível escrever na tela o array
diretamente:
var pratos = ['Pizza', 'Chocolate',
'Lasanha', 'Feijoada'];
document.write(
"Eu quero " + pratos.length + " pratos: ");
document.write(pratos);
Eu quero 4 pratos:
Pizza,Chocolate,Lasanha,Feijoada
http://marx.vanderlinden.com.br/
22
Modificando o array
var pratos = ['Pizza', 'Chocolate', 'Lasanha',
'Feijoada'];
document.write("Eu quero " + pratos.length + "
pratos: ");
for(var i=0; i<pratos.length; i++)
document.write(pratos[i] + ' ');
pratos[3] = 'Salada'; pratos[5] = 'Macarrão';
document.write('<br>');
document.write("Eu quero " + pratos.length + "
pratos: ");
for(var i=0; i<pratos.length;
http://marx.vanderlinden.com.br/ i++)
23
document.write(pratos[i] + ' ');
Saída
Eu quero 4 pratos: Pizza Chocolate Lasanha
Feijoada
Eu quero 6 pratos: Pizza Chocolate Lasanha
Salada undefined Macarrão
http://marx.vanderlinden.com.br/
24
Encurtando o array
var pratos = ['Pizza', 'Chocolate', 'Lasanha',
'Feijoada'];
document.write("Eu quero " + pratos.length + "
pratos: ");
for(var i=0; i<pratos.length; i++)
document.write(pratos[i] + ' ');
pratos.length = 2;
document.write('<br>');
document.write("Eu quero " + pratos.length + "
pratos: ");
for(var i=0; i<pratos.length;
http://marx.vanderlinden.com.br/ i++)
25
document.write(pratos[i] + ' ');
Saída
Eu quero 4 pratos: Pizza Chocolate Lasanha
Feijoada
Eu quero 2 pratos: Pizza Chocolate
http://marx.vanderlinden.com.br/
26
Aumentando o array
var pratos = ['Pizza', 'Chocolate', 'Lasanha',
'Feijoada'];
document.write("Eu quero " + pratos.length + "
pratos: ");
for(var i=0; i<pratos.length; i++)
document.write(pratos[i] + ' ');
pratos.length = 6;
document.write('<br>');
document.write("Eu quero " + pratos.length + "
pratos: ");
for(var i=0; i<pratos.length;
http://marx.vanderlinden.com.br/ i++)
27
document.write(pratos[i] + ' ');
Saída
Eu quero 4 pratos: Pizza Chocolate Lasanha
Feijoada
Eu quero 6 pratos: Pizza Chocolate Lasanha
Feijoada undefined undefined
http://marx.vanderlinden.com.br/
28
Arrays

Arrays em Javascript são dinâmicos.

Redimensionamento automático:

O array cresce para acomodar novos
elementos que lhe são atribuídos.
O comprimento do array (length) pode ser
modificado diretamente em tempo de
execução.


Elementos não inicializados recebem o valor
undefined.
http://marx.vanderlinden.com.br/
29
Arrays e Objetos




Um array é um objeto como qualquer outro.
Um array pode ter propriedades (como
qualquer objeto).
As propriedades e os índices do array não se
misturam.
Inteiros e strings que podem ser convertidas
em inteiros são consideradas índices.
http://marx.vanderlinden.com.br/
30
Arrays e Objetos
pratos = [ 'Pizza', 'Chocolate', 'Lasanha',
'Feijoada' ];
pratos['extra'] = 'Surpresa do dia';
document.write("Eu quero " + pratos.length +
" pratos: ");
for(var i=0; i<pratos.length; i++)
document.write(pratos[i] + ' ');
document.write(pratos['extra']);
Eu quero 4 pratos: Pizza Chocolate Lasanha
Feijoada Surpresahttp://marx.vanderlinden.com.br/
do dia
31
Arrays e Objetos
pratos = [ 'Pizza', 'Chocolate', 'Lasanha',
'Feijoada' ];
pratos['extra'] = 'Surpresa do dia';
pratos['6'] = 'Salada';
pratos[0.5] = 'Promoção';
pratos[true] = 'Molho';
document.write(
"Eu quero " + pratos.length + " pratos: " );
for(var i=0; i<pratos.length; i++)
document.write( pratos[i] + ' ' );
document.write( '<br>' );
document.write( pratos.extra
http://marx.vanderlinden.com.br/ + ', ' +
pratos[0.5] + ', ' + pratos[true] );
32
Saída
Eu quero 7 pratos: Pizza Chocolate Lasanha
Feijoada undefined undefined Salada
Surpresa do dia, Promoção, Molho
http://marx.vanderlinden.com.br/
33
Strings como arrays

Em Javascript, um string pode ser tratado
como um array de caracteres, apenas para
leitura.
var pais = "Brasil";
pais[3] = 'z';
document.write(
pais.length + ' ' + pais[2] + ' ' + pais
);
6 a Brasil
http://marx.vanderlinden.com.br/
34
for/in

Em um array, a estrutura for/in recupera
tanto as propriedades do objeto, quanto os
índices do array.
http://marx.vanderlinden.com.br/
35
for/in
pratos = [ 'Pizza', 'Chocolate', 'Lasanha',
'Feijoada' ];
pratos['extra'] = 'Surpresa do dia';
pratos['6'] = 'Salada';
pratos[0.5] = 'Promoção';
pratos[true] = 'Molho';
document.write("Conteúdo do objeto: <ul>");
for (var x in pratos)
document.write(
'<li>' + x + ': ' + pratos[x] + '</li>'
);
http://marx.vanderlinden.com.br/
document.write("</ul>");
36
Saída
Conteúdo do objeto:
●
0: Pizza
●
1: Chocolate
●
2: Lasanha
●
3: Feijoada
●
extra: Surpresa do dia
●
6: Salada
●
0.5: Promoção
●
true: Molho
http://marx.vanderlinden.com.br/
37
delete



A palavra-chave delete pode ser usada para
excluir propriedades do objeto ou índices do
array.
Ao se excluir um elemento do arrays, os
elemntos seguintes não são movidos.
Sintaxe:
 delete objeto.nome;
 delete objeto['valor'];
 delete objeto[variável];
http://marx.vanderlinden.com.br/
38
Excluindo elementos
delete pratos[2];
delete pratos.extra;
Conteúdo do objeto:
Conteúdo do objeto:
●
0: Pizza
●
0: Pizza
●
1: Chocolate
●
1: Chocolate
●
2: Lasanha
●
3: Feijoada
●
3: Feijoada
●
6: Salada
●
extra: Surpresa do dia
●
0.5: Promoção
●
6: Salada
●
true: Molho
●
0.5: Promoção
●
true: Molho
http://marx.vanderlinden.com.br/
39
Métodos

Um método é uma função associada a um
objeto.
Ex.: document.write("Hello, World!")
Javascript define alguns métodos que podem
ser utilizados em arrays:



join

splice

reverse

push

sort

pop

concat

shif

slice
unshift

http://marx.vanderlinden.com.br/
40
join()

join([separador])


Retorna a concatenação de todos os
elementos do array, intercalados com o
separador.
Se o separador não for especificado, usase ','.
var pratos = [ 'Pizza', 'Chocolate',
'Lasanha', 'Feijoada' ];
document.write( pratos.join('; ') );
Pizza; Chocolate; http://marx.vanderlinden.com.br/
Lasanha; Feijoada
41
reverse()

reverse()

Inverte a ordem os elementos do array.
var pratos = [ 'Pizza', 'Chocolate',
'Lasanha', 'Feijoada' ];
pratos.reverse();
document.write( pratos.join('; ') );
Feijoada; Lasanha; Chocolate; Pizza
http://marx.vanderlinden.com.br/
42
sort()

sort()

Ordena os elementos do array alfabeticamente.
var pratos = [ 'Pizza', 'Chocolate',
'Lasanha', 'Feijoada' ];
pratos.sort();
document.write( pratos.join('; ') );
Chocolate; Feijoada; Lasanha; Pizza
http://marx.vanderlinden.com.br/
43
concat()

concat(elemento+)

Retorna um novo array, composto pela
concatenação do array original com todos os
argumentos.
var pratos = [ 'Pizza', 'Chocolate',
'Lasanha', 'Feijoada' ];
var novospratos = pratos.concat(
'Salada', 'Macarrão' );
document.write( novospratos );
Pizza,Chocolate,Lasanha,Feijoada,Salada,
Macarrão
http://marx.vanderlinden.com.br/
44
concat()

Arrays adicionados com concat() são
mesclados ao original.
var pratos = [ 'Pizza', 'Chocolate',
'Lasanha', 'Feijoada' ];
var vegetais =
[ 'Tomate', 'Cenoura', 'Pimentão' ];
var novospratos = pratos.concat(
vegetais, ['Feijão', 'Arroz'], 'Frango'
);
document.write( novospratos );
Pizza,Chocolate,Lasanha,Feijoada,Tomate,Ceno
http://marx.vanderlinden.com.br/
45
ura,Pimentão,Feijão,Arroz,Frango
slice()

slice(início,[fim])



Retorna um novo array contendo os
elementos do array original a partir de
início, até antes do fim.
Se fim for omitido, usa-se o último elemento.
Números negativos podem ser usados em
ambos os argumentos, significando uma
contagem a partir do final do array.
http://marx.vanderlinden.com.br/
46
slice()
var pratos = [ 'Pizza', 'Chocolate',
'Lasanha', 'Feijoada' ];
document.write( pratos.slice(1,3)
+ " <br>\n" );
document.write( pratos.slice(1)
+ " <br>\n");
document.write( pratos.slice(-2) );
Chocolate,Lasanha<br>
Chocolate,Lasanha,Feijoada<br>
Lasanha<br>
http://marx.vanderlinden.com.br/
47
splice()

splice(início, [fim], [elemento+])



Remove elementos do array, nas posições
entre início e antes de fim.
Opcionalmente, insere novos elementos, no
lugar dos removidos.
Modifica o array original! (não retorna um
novo array).
http://marx.vanderlinden.com.br/
48
splice()
var pratos = [ 'Pizza', 'Chocolate',
'Lasanha', 'Feijoada' ];
pratos.splice(1,2, 'Feijão', 'Arroz');
document.write(pratos);
Pizza,Feijão,Arroz,Feijoada
http://marx.vanderlinden.com.br/
49
push()

push(elemento+)



Modifica o array, adicionando elementos ao
seu final.
Retorna o novo tamanho do array.
Não mescla novos arrays acrescentados.
var pratos = [ 'Pizza', 'Chocolate',
'Lasanha', 'Feijoada' ];
var x = pratos.push('Feijão', 'Arroz');
document.write( x + ' itens: ' + pratos);
6 itens: Pizza,Chocolate,Lasanha,Feijoada,
http://marx.vanderlinden.com.br/
Feijão,Arroz
50
concat() vs. push()
var pratos = [ 'Pizza', 'Chocolate',
'Lasanha', 'Feijoada' ];
var fj = ['Feijão', 'Arroz'];
pratos2 = pratos.concat(fj);
var t1 = pratos2.length;
var t2 = pratos.push(fj);
document.write(
t2 + ' itens: ' + pratos.join('| ') +
"<br>\n"
);
document.write(
t1 + ' itens: ' http://marx.vanderlinden.com.br/
+ pratos2.join('| ')
);
51
concat() vs. push()

Saída:
5 itens: Pizza| Chocolate| Lasanha| Feijoada| Feijão,Arroz
6 itens: Pizza| Chocolate| Lasanha| Feijoada| Feijão| Arroz
http://marx.vanderlinden.com.br/
52
pop()

pop()

Remove o último elemento do array e o
retorna.
var pratos = [ 'Pizza', 'Chocolate',
'Lasanha', 'Feijoada' ];
var ultimo = pratos.pop();
document.write(ultimo + "<br>\n");
document.write(pratos);
Feijoada<br>
Pizza,Chocolate,Lasanha
http://marx.vanderlinden.com.br/
53
unshift()

unshift(elemento+)

Insere os elementos no início do array, na ordem
em que são especificados.
var pratos = [ 'Pizza', 'Chocolate',
'Lasanha', 'Feijoada' ];
pratos.unshift('Batata frita');
document.write(pratos);
http://marx.vanderlinden.com.br/
54
unshift()

1
var pratos = [ 'Pizza', 'Chocolate',
'Lasanha', 'Feijoada' ];
pratos.unshift('Arroz', 'Batata', 'Cebola');
document.write(pratos);

2
var pratos = [ 'Pizza', 'Chocolate',
'Lasanha', 'Feijoada' ];
pratos.unshift('Arroz');
pratos.unshift('Batata');
pratos.unshift('Cebola');
document.write(pratos);
http://marx.vanderlinden.com.br/
55
unshift()

1
Arroz,Batata,Cebola,Pizza,Chocolate,Lasanha,
Feijoada

2
Cebola,Batata,Arroz,Pizza,Chocolate,Lasanha,
Feijoada
http://marx.vanderlinden.com.br/
56
shift()

shift()

Remove o primeiro elemento e o retorna.
var pratos = [ 'Pizza', 'Chocolate',
'Lasanha', 'Feijoada' ];
var primeiro = pratos.shift();
document.write(primeiro + "<br>\n");
document.write(pratos);
Pizza<br>
Chocolate,Lasanha,Feijoada
http://marx.vanderlinden.com.br/
57
Arrays Multidimensionais



Em Javascript, um array pode conter
elementos de qualquer tipo, inclusive outros
arrays.
Arrays que contém outros arrays podem ser
visualizados como matrizes.
Podem ser usados para armazenar séries de
dados que ocupam mais de uma dimensão.
http://marx.vanderlinden.com.br/
58
Matrizes
var
[
[
[
];
familia =
"Fred",
"George",
"Homer",
[
"Barney" ],
"Jane", "Elroy" ],
"Marge", "Bart" ],
document.write(
familia[1][2] + ', ' + familia[2][0]
);

Saída:
Elroy, Homer
http://marx.vanderlinden.com.br/
59
Acrescentando Elementos
var
[
[
[
];
familia =
"Fred",
"George",
"Homer",
[
"Barney" ],
"Jane", "Elroy" ],
"Marge", "Bart" ],
familia[0][2] = "Wilma";
//familia[3][2] = "Erro!";
document.write( familia[1][2] + ', ' +
familia[2][0] + ', ' + familia[0][2] );
Elroy, Homer, Wilma
http://marx.vanderlinden.com.br/
60
Objetos e Arrays



Arrays podem conter objetos de qualquer tipo,
não apenas outros arrays.
Objetos também podem conter outros objetos e
arrays.
É possível usar várias combinações de objetos
e arrays, para organizar seus dados de
maneira hierárquica.
http://marx.vanderlinden.com.br/
61
Array de Objetos
familia = [
{ pai
amigo
},
{ 'pai'
'mae'
'filho'
},
{ pai
mae
filho
} ];
: 'Fred',
: 'Barney'
: 'George',
: 'Jane',
: 'Elroy'
: 'Homer',
: 'Marge',
: 'Bart'
document.write( familia[1].mae
+ ', ' +
http://marx.vanderlinden.com.br/
familia[2].filho );
62
Objeto com Objetos
familia = {
'Flintstones' : {
pai
: 'Fred',
amigo
: 'Barney' },
'Jetsons' : {
'pai'
: 'George',
'mae'
: 'Jane',
'filho'
: 'Elroy'
},
'Simpsons' : {
pai
: 'Homer',
mae
: 'Marge',
filho
: 'Bart' }
};
document.write( familia.Jetsons.mae
+ ', ' 63+
http://marx.vanderlinden.com.br/
familia.Simpsons.filho );
Objeto com Arrays
familia = {
'Flintstones' : [ 'Fred', 'Barney' ],
'Jetsons' :
[ 'George', 'Jane', 'Elroy' ],
'Simpsons' :
[ 'Homer', 'Marge', 'Bart' ]
};
document.write( familia.Jetsons[1] + ', ' +
familia.Simpsons[2] );
http://marx.vanderlinden.com.br/
64
Percorrendo a Estrutura Hierárquica


Para percorrer estruturas hierárquicas, basta
utilizar combinações de loops for ou for/in.
Exemplo (Objeto com Objetos):
for(nomefam in familia){
document.write(
"<h3>" + nomefam + "</h3>"
);
for(membro in familia[nomefam])
document.write(
"<strong>" + membro+ "</strong> " +
familia[nomefam][membro] + "<br>"
);
http://marx.vanderlinden.com.br/
65
}
Percorrendo a Estrutura Hierárquica
http://marx.vanderlinden.com.br/
66