Null
usado quando uma variável não tem um valor aplicável naquele momento (let x = null;)
Undefined
é o tipo atribuído a variáveis que não foram associadas a nenhum valor (let x;)
Object
um “saquinho” de propriedades:
-
js
let voo = {
companhia: 'Gol',
destino: {
cidade: 'Sydney'
}
};
js
// ...
voo.numero = 815;
voo.destino.IATA = 'SYD';
if (voo.companhia === 'Gol'){
voo.preco = 700;
}
const x = 10; // queremos "(10px, 20px)"
const y = 20;
// string NORMAL: '...' ou "..."
let posicao1 = '(' + x + 'px, ' + y + 'px)';
// string TEMPLATE: `...`
let posicao2 = `(${x}px, ${y}px)`;
// ambas geram: "(10px, 20px)"
const bebidas = ['refri', 'suco', 'cerveja'];
// usando função ANÔNIMA:
let com5Letras = bebidas.filter(function(b) {
return b.length === 5;
});
// usando função SETA:
com5Letras = bebidas.filter(b => b.length === 5);
// callback com função ANÔNIMA:
el.addEventListener('click', function() {
alert(':3');
});
// callback com função SETA:
el.addEventListener('click', () => alert(':3'));
document.querySelectorAll retorna todos que forem selecionadosÉ possível alterar o conteúdo de um elemento com elemento.innerHTML:
let contador = 0;
let contadorEl = document.querySelector('#contador');
// quando clicado, (1) conta e (2) altera conteúdo
contadorEl.addEventListener('click', () => {
contador++; // (1) conta
contadorEl.innerHTML = contador; // (2) altera
});
booEl.classList.toggle('selecionado'); // add, remove ou toggle (alternar)
pokemonLutandoEl.src = 'bulbasaur.png'; // qualquer atributo, aqui foi src
booEl.addEventListener('click', function(e) {
let clicadoEl = e.currentTarget; // elemento alvo (target) do evento
clicadoEl.classList.toggle('selecionado');
});
windowwindow.alert('mensagenzinha feia 🔥'); // retorna undefined
window.confirm('janela pedindo confirmacao'); // retorna true, false
window.prompt('escreva seu nome, champz', 'b. verde'); // retorna uma string
// url, título, opções
window.open('/popup.html', 'Enquete', 'resizable,scrollbars'); // #feioDemais!
function assustaUsuario() {
window.alert('Boo!');
}
window.setTimeout(assustaUsuario, 200); // chama daqui a 200ms, 1x
window.setInterval(assustaUsuario, 1000); // chama a cada 1s, forever
window.eval('window.alert("eval is evil!");'); // nao fazer em casa
window.eval(textoComCodigo) executa o textoComCodigo que é uma String que pode conter código JavaScriptwindow possui outros objetos importantes:
window.document
window.navigator
window.console
window.Math
Math.sin, Math.floor, Math.roundwindow.location
window é o único objeto global, podemos acessar
suas propriedades sem usar `"window."` :scream:. Por exemplo:
window.console.log('JoJo >> Naruto');
É o mesmo que:
console.log('JoJo >> Naruto'); // sucesso!!
window para que o código fique menorzinhoel.classList.add(...)el.classList.remove(...)el.classList.toggle(...)style
booEl.classList.add('selecionado'); // adiciona .selecionado
botaoEl.classList.remove('oculto'); // remove .oculto
.classList do elementostyle:
botaoEl.style.width = '80%'; // define largura como 80%
botaoEl.style.paddingTop = '2px'; // padding-top vira paddingTop
.style do elementobotaoEl.style.backgroundColor = '#cccccc';
background-color ➡️ backgroundColor border-radius ➡️ borderRadiusmargin ➡️ marginlist-style-type ➡️ listStyleTypez-index ➡️ zIndexlet nome-da-variavel = 'incorreto'; // Uncaught SyntaxError: Unexpected token -
elemento.style?Contudo, em certos casos é melhor usar .style:
Quando precisamos calcular, em JavaScript, o valor de uma propriedade
Exemplo: abelhinhas.js
.abelhinha {
position: absolute; /* precisamos de position: absolute */
left: ??; /* mas como calcular left e top? */
top: ??; /* tem que ser via JavaScript =) */
}
// cria um objeto abelhinha
let abelhinha = {
x: 0, // pos. x inicial
y: 0, // pos. y inicial
imagemEl: document.querySelector('#abelhinha')
};
// função que acha a nova posição
function atualizaAbel() {
abelhinha.x += 1;
abelhinha.y += Math.sin(abelhinha.x);
abelhinha.imagemEl.style.left = `${abelhinha.x}px`;
abelhinha.imagemEl.style.top = `${abelhinha.y}px`;
}
// registra a função em um intervalo
setInterval(atualizaAbel, 33);
click (clique simples) .dblclick (clique duplo) .mousedown (press. um botão) .mouseup (liberou um botão) .mousemove (movimentou) .mouseover (sobrevoou um elem.) .mouseout (saiu de um elemento) . botaoEl.onclick = function(e) { /*...*/ };
botaoEl.addEventListener('click', function(e) { /*...*/ });
e.pageX e e.pageY
Além de CSS e HTML podemos depurar o JavaScript de uma página:let x = 1;
let x = 3; // erro
function alternarElementoExpandir(e){
paragrafoEl.classList.toggle('expandido'); // paragrafoEl não havia sido
} // declarada
botoesExpandir.addEventListener(‘click’, alternarElementoExpandir); // erro! // dá erro porque botoesExpandir é um array, não um elemento HTML ```