JavaScript no cliente e DOM
Tipos, arrays, funções, closures, objetos, protótipos, DOM, eventos e delegação.
Valores
constfixa a ligação, não o objeto;leteconsttêm âmbito de bloco,varde função.'8' + 1é'81';'8' - 1é 7.===não converte;[1] === [1]é falso (referências distintas).Number('8x')éNaN;parseInt('8x', 10)é 8. Entrada inteira completa: rejeita vazio, converte, confirmaNumber.isIntegere limites.- Falsos:
0,'',null,undefined,NaN,false. Arrays e objetos vazios são verdadeiros.||substitui falsos;??sónull/undefined(quantidade 0 válida pede??).
Arrays e funções
| Operação | Devolve | Altera o original? |
|---|---|---|
map, filter | Novo array | Não |
reduce (com inicial) | Valor acumulado | Não |
forEach | undefined | Só por efeito |
slice, [...a] | Cópia superficial | Não |
splice, push, pop, sort | Vários | Sim |
for...ofdá valores;for...indá nomes de propriedades.map(f)passa a função;map(f())passa o resultado da chamada. Arrow com chavetas precisa dereturn.sortsem comparador ordena como texto ([25, 3, 8]). Números:sort((a, b) => a - b)sobre cópia.- Cópia superficial partilha objetos interiores:
b[0].preco = xmudaa[0].preco.
Closures e this
function contador(inicio) {
let n = inicio;
return () => ++n;
}
const a = contador(5),
b = contador(0);
a();
a();
b();
a(); // 6 7 1 8
- Cada chamada cria ambiente próprio.
letno ciclo dá ligação por iteração;varpartilhado deixa callbacks lerem o valor final. livro.nome()temthisno recetor;const f = livro.nomeperde-o (undefinedem modo estrito).callexecuta com recetor;bindcria função ligada. Arrow herdathisdo local de criação.- Métodos de classe vivem no protótipo; dados do construtor, na instância.
staticpertence à classe;#restringe acesso.
DOM: procurar e mudar
querySelectordá o primeiro ounull;querySelectorAlldá NodeList estática.childrené viva (só elementos);childNodesinclui texto.closestsobe a partir do próprio elemento;dataset.idlêdata-id;input.valueé o valor atual, não o atributo inicial.textContentescreve texto literal;innerHTMLinterpreta marcação (perigoso com entrada).- Inserir nó existente move-o;
cloneNode(true)copia descendentes mas não listeners; nunca dupliques IDs.
Eventos
targeté onde começou;currentTargeté o elemento do listener em execução. Delegação: um listener noulserve itens futuros viaclosest.preventDefaultcancela a ação nativa;stopPropagationtrava o percurso. São independentes.defercorre por ordem após a análise, antes deDOMContentLoaded;asynccorre ao acabar o download.setTimeoutdá atraso mínimo, não hora exata.- Remover exige a mesma função. Cada
bindcria função nova: guarda-a e reutiliza-a emremoveEventListener, com igual tipo e captura. Repetir a mesma combinação não duplica o registo.