- Na forma literal ➡️:
- Preferiemos ela, por ser mais curta e simples
let jogador = {
pontos: 1420,
vidas: 2
};
let jogador = new Object();
jogador.pontos = 1420;
jogador.vidas = 2;
- ⬅️ Usando o operador
new
:- Equivalente a
let jogador = {}
- Dizemos que estamos usando uma função construtora
- Equivalente a
- Podemos passar objetos como argumentos para funções
- A função é declarada como recebendo 1 parâmetro ➡️
- Chamamos ela passando um objeto como argumento ➡️
- Para um vetor percorremo-lo chamando a função para o
i-ésimo item
↘️
let jogadores = [
{ nome: 'Yoda', pontos: 1420 },
{ nome: 'Leia', pontos: 3010 }
];
function passouDeFase(player) {
// a função recebe 1 parâmetro,
// que demos o nome de player
player.pontos += 1000;
}
// podemos chamar a função para 1 jogador:
passouDeFase(jogadores[0]); // Yoda
// ...ou para todos eles, percorrendo o vetor:
for (let i = 0; i < jogadores.length; i++) {
passouDeFase(jogadores[i]);
}
// ELEGANTE, usando vetor.forEach:
jogadores.forEach(passouDeFase); // 🌟🌟🌟
- Para vincularmos um elemento criado, precisamos conhecer seu pai
- Então, inserimos o elemento usando um dos seguintes comandos:
appendChild
: será o filho mais à direitainsertBefore
: será o filho que vem logo antes de outroreplaceChild
: substituirá um filho existente
let containerEl = document.querySelector('#ovelhas');
let novaOvelhaEl = document.createElement('img');
novaOvelhaEl.src = 'img/ovelho-pixel.png';
containerEl.appendChild(novaOvelhaEl);
- Usando o Web Storage
- Salvando para sempre com o
localStorage
- Salvando temporariamente com o
sessionStorage
- Salvando para sempre com o
- Lista de Tarefas 📓 x2 (parte 1)
- O formato JSON
- Lista de Tarefas 📓 x2 (parte 2)
- Por que e o que salvar?
- O Web Storage
localStorage
sessionStorage
- As nossas páginas podem querer salvar várias coisas:
- Exemplo: Moodle
- Motivo: manter preferências do usuário sobre a interface
- O que salvar? o que está aberto/fechado, a língua etc
- Exemplo: Slides da aula
- Motivo: mostrar o "tutorial" apenas 3x
- O que salvar? quantas vezes já mostrou o tutorial
- Exemplo: Trello
- Motivo: guardar um "rascunho" que ainda não foi salvo
- O que salvar? o conteúdo digitado pelo usuário
- Exemplo: Moodle
- O Web Storage permite páginas armazenarem dados
no navegador
- storage === armazenamento
- Existem dois sabores:
localStorage
, salva os dados "para sempre"sessionStorage
, salva apenas "durante a sessão"
- Os dados são salvos apenas no próprio navegador
- Isto é, se você abrir a página em outro navegador ou computador, ainda não existem dados salvos
- Ambos nos permitem armazenar valores dentro de Strings
- Cada item armazenado é composto por uma chave (nome) e um valor
- Exemplo (salvando):
window.localStorage.setItem('personagem', 'Jake'); window.localStorage.setItem('quest', 'Salvar a Jujuba');
- Lembre-se:
window.
localStorage
- Lembre-se:
- Exemplo (recuperando):
let nome = localStorage.getItem('personagem'); // retorna "Jake" let objetivo = localStorage.getItem('quest'); // retorna "Salvar a Jujuba"
- Exemplo (salvando):
-
É possível inspecionar o que foi salvo na aba Application:
- Um evento de clique em um botão que faz o menu aparecer e desaparecer:
// ... botaoMenuEl.addEventListener('click', function() { let menuEl = document.querySelector('#menu'), isExpandido = menuEl.classList.toggle('expandido'); // isExpandido = true ou false localStorage.setItem('menu-esta-expandido', isExpandido); });
- (continua no próximo slide)
- Após a página ter sido carregada (ex, um script ao final do body):
let devoExpandirMenu = localStorage.getItem('menu-esta-expandido'); if (devoExpandirMenu === 'true') { // lembre-se: tudo é salvo como String let menuEl = document.querySelector('#menu'); menuEl.classList.add('expandido'); }
- Ou seja, expande o menu se o usuário o havia deixado expandido antes
- Salvar alguma coisa:
localStorage.setItem('chave', 'valor');
- Recuperar um item a partir de sua chave:
localStorage.getItem('chave');
- Excluir um item:
localStorage.removeItem('chave');
- Exata mesma funcionalidade do
localStorage
, porém o navegador armazena as informações apenas enquanto o usuário está "em uma sessão"- Uma sessão é encerrada:
- Com o usuário digitando outro endereço na barra
- O navegador fechando
- O usuário navegando para outro domínio naquela mesma janela/aba
- Uma sessão é encerrada:
- Os métodos do
sessionStorage
são os mesmos dolocalStorage
- O que mudou no código
- Atividade, parte 1
- Um novo
<input>
para o nome do "dono da lista" - Botões para
#salvar
e#carregar
os dados
- Os exercícios 1, 2 e desafio 1 (semana passada) estão feitos:
- [Exercício 1] Carregar o vetor
tarefas
- [Exercício 2] Inserir nova tarefa
- [Desafio 1]: Inserir nova tarefa no topo
- [Exercício 1] Carregar o vetor
- Agora você deve baixar o código atualizado
e fazer o Exercício 3
- Enunciado completo
- Resumão: implemente os botões
#salvar
e#carregar
para armazenar e recuperar quem é o dono da lista de tarefas
- Agora, faça o Exercício 4, que é tentar salvar também o vetor
de tarefas quando clicarem em
#salvar
- Antes de tentar recuperar as tarefas no
#carregar
, use a ferramenta do desenvolvedor e veja o que foi salvo...- Era o que você esperava?
- Para corrigir isso, volte aos slides/vídeos da aula
Atenção: Não avance os slides até fazer o exercício 4
- O que foi salvo em vez do vetor:
- Como dito, o Web Storage armazena apenas Strings
- Mas seria útil armazenar objetos complexos. Por exemplo:
// ao clicar em 'salvar' let jogo = { fase: 4, vidas: 5, jogador: 'Ariosvaldo' }; localStorage.setItem('meu-save', jogo); // ao clicar em 'carregar' jogo = localStorage.getItem('meu-save'); // jogo = "[object Object]"
- Precisamos de uma forma para representar o objeto dentro de
uma String... tipo assim:
localStorage.setItem('meu-save', 'propriedades: fase = 4, vidas = 5...');
- Mas seria útil armazenar objetos complexos. Por exemplo:
- Na verdade, o JavaScript sabe serializar e desserializar objetos em
Strings, usando um formato que se chama JSON
- JSON é JavaScript Object Notation
- Salvando:
// Usamos JSON.stringify(objeto) localStorage.setItem('estado-do-jogo', JSON.stringify(jogo)); // Salvou a string: {"fase":4,"vidas":5,"jogador":"Ariosvaldo"}"
- Recuperando:
let jogo = localStorage.getItem('estado-do-jogo'); jogo = JSON.parse(jogo); // Usamos JSON.parse(stringComUmObjeto)
- Agora você já pode fazer o Exercício 5 :3
[JSON]: JavaScript Object Notation
- O que é JSON
- Descrição do formato
- JSON no navegador
- É um formato criado para representar dados
- Baseado na notação literal de objetos do JavaScript
- Pode ser usado para troca de informação entre programas escritos em
diversas linguagens
- Podemos escrever o formato dentro de uma String
- Podemos fazer um programa enviar dados nesse formato pr'outro
- Podemos ter arquivos
.json
. Exemplo:produto.json
{ "identificador": 44235, "nome": "Caixinha de fósforo", "quantidade": 3 }
- O formato possui seis tipos de valores:
- Objetos
- Arrays
String
Number
Boolean
null
- Um objeto JSON é como um objeto JavaScript: um container de
propriedades (nome, valor)
- Um nome de propriedade é sempre uma String entre áspas duplas
- Um valor pode ser de qualquer tipo dos listados acima
- O objeto
window
possui o objetoJSON
que contém métodos de conversão do formato JSON entre string e objetos JavaScript- De JavaScript para string (serialização):
JSON.stringify({ nome: 'Flavio', sobrenome: 'Coutinho' }); // JSON.stringify // retorna '{"nome":"Flavio","sobrenome":"Coutinho"}'
- De string para JavaScript (desserialização):
let banco = JSON.parse('{"nome":"Itaú","codigo":"341"}'); // JSON.parse console.log(banco.nome); // imprime Itaú
- De JavaScript para string (serialização):
- Atividade, parte 2
- Agora que você já sabe como salvar representar um Object dentro de uma
String, você pode salvar objetos no
localStorage
/sessionStorage
let frutas = [ { nome: 'Morango', calorias: 20 }, { nome: 'Banana', calorias: 45 } ]; localStorage.setItem('minhas-frutas', JSON.stringify(frutas));
- E, para recuperar:
let frutasComoString = localStorage.getItem('minhas-frutas'); frutas = JSON.parse(frutasComoString);
- No Exercício 5, você deve salvar e carregar a lista de tarefas do usuário, no mesmo momento que salva/carrega o nome do dono da lista
No Desafio 1, você deve implementar o botão
#minimizar
que minimiza/restaura a logomarca- Para isso, simplesmente alterne a classe
.minimizado
em#marca
- Além disso, você deve guardar no
sessionStorage
se a#marca
está minimizada ou não - Quando a página for carregada, você deve verificar o
sessionStorage
para ver se precisa minimizar a logomarca (i.e., colocar a classe)
- Para isso, simplesmente alterne a classe
- Capítulo 12 do livro "Head First: JavaScript"
- Apêndice E do livro "JavaScript - The Good Parts"
- Mozilla Developer Network (MDN)