Uma linguagem de programação similar a qualquer outra. Long story short, foi criada para ser uma linguagem que funcionasse em browsers. Hoje em dia é uma das mais utilizadas (se não A mais utilizada) linguagem de programação no mundo, servindo de aplicações Web a Mobile e até games.
// Declarando variáveis em JS
const PI = 3.14; // constante
let num1 = 1234; // variável
var num2 = 4321; // modo antigo
hello = 'World' // var globalVariáveis
Fluxos Condicionais
// === indica que a variável deve ter o mesmo valor e ser do mesmo tipo
// no caso, age precisa ser o número 18, não apenas uma string '18'
if ( age >= 18 ){
console.log('You can drink!!');
} else if ( age === 17 ){
console.log('You almost can drink!!');
} else {
console.log('You really should not drink...');
}
// ternário
console.log( x >= 18 ? 'Can drink!' : 'Cannot drink!');Loops
// while
while( x < 3 ){
console.log(x);
x++;
}
// for clássico
for( x = 1; x < 3; x++ ){
console.log(x);
}
// for parecido com each de ruby
arr = ["James", "Lars", "Robert", "Kirk"];
arr.forEach(function(name, index, array){
console.log("Name is: " + name);
console.log("It's index is: " + index);
console.log("The array is: " + array)
});
Funções
// Jeito antigo
function square(x){
return x**2;
}
// Jeito novo
const square = (x) => {
return x**2;
}
// Jeito novo, com return implicito
const square = x => x**2;
JSON
// JSON (Javascript Object Notation)
// Nada mais é do que uma hash
const aluno = {
name: 'Rafael',
age: 22
}
// Conseguimos acessar as informações de um objeto
// de duas maneiras distintas
console.log(aluno['name']);
console.log(aluno.age);Muito utilizado como formato de resposta de APIs!
Funções úteis
// retorna o tipo do parâmetro passado
typeof(2); // => 'number'
typeof(2.1); // => 'number'
// parse de string para número, em base decimal (10)
Number.parseInt('42', 10);
// parse de número para string
(42).toString();
// upcase
'João'.toUpperCase();
// downcase
'João'.toLowerCase();
// interpolação
// => string entre ` (backticks), código entre '${}'
family = 'Starks'
console.log(`I am team ${family}`);Document Object Model
DOM trata a página como uma árvore, onde cada elemento é um nó
JS consegue interagir com o DOM, acessando seus elementos, lendo e/ou reescrevendo suas propriedades!
// Seleciona o elemento da página que possua
// o id="banner"
banner = document.querySelector('#banner');
// ou
banner = document.getElementById('banner');
// Seleciona todos os elementos da página que
// possuam a classe 'avatar'
banner = document.querySelector('.avatar');
// O que há de texto dentro do banner?
console.log(banner.innerText);
// O que há de código HTML dentro do banner?
console.log(banner.innerHTML);Note que o parâmetro de 'querySelector' é igual a seletores que utilizamos em CSS!
JS também consegue adicionar e/ou manipular nós!
banner = document.getElementById('banner');
// cria um elemento do tipo <h1></h1>
h1 = document.createElement('h1');
// cria um elemento de texto
text = document.createElement("Hello world!");
// insere o elemento dentro de um 'pai'
h1.appendChild(text);
// insere o elemento no banner da página
banner.insertAdjacentHTML('beforeend', h1);
// Posição a declarar no primeiro parametro de 'insertAdjacentHTML'
// <!-- beforebegin -->
// <div id='banner'>
// <!-- afterbegin -->
// ..... conteúdo já existente .....
// <!-- beforeend -->
// </div>
// <!-- afterend -->JS também consegue adicionar e/ou manipular nós!
banner = document.getElementById('banner');
// cria um elemento do tipo <h1></h1>
h1 = document.createElement('h1');
// cria um elemento de texto
text = document.createElement("Hello world!");
// insere o elemento dentro de um 'pai'
h1.appendChild(text);
// insere o elemento no banner da página
banner.insertAdjacentHTML('beforeend', h1);
// Posição a declarar no primeiro parametro de 'insertAdjacentHTML'
// <!-- beforebegin -->
// <div id='banner'>
// <!-- afterbegin -->
// ..... conteúdo já existente .....
// <!-- beforeend -->
// </div>
// <!-- afterend -->Conseguimos acessar o estilo de cada nó de duas maneiras diferentes
banner = banner.querySelector('#banner');
// recupera uma 'array' de classes do elemento;
banner.classList;
// adiciona uma classe ao elemento
banner.classList.add('red');
// remove uma classe do elemento, se houver
banner.classList.remove('red');
// Se há uma classe, remova-a. Se não há, adicione
banner.classList.toggle('red');
// recupera todo o estilo do elemento;
banner.style;
// esconda-o da página
banner.style.display = 'none';
// mostre-o na página
banner.style.display = 'block'; // ou qualquer outroSe possuirmos informações importantes a serem utilizadas posteriormente em JS, podemos guardá-las em datasets (HTML)...
<div id='banner' dataset-id='123' dataset-name='joao'>
<h1> Hello World! </h1>
<!-- ... -->
</div>E acessá-las posteriormente!
banner = banner.querySelector('#banner');
console.log(banner.dataset.id); // => '123'
console.log(banner.dataset.name); // => 'Joao'Para nos adaptarmos às interações do usuário
Event Listeners são funções ativadas somente quando um tipo de interação especificado ocorre em um certo elemento, também especificado. São tipos de interação:
Estrutura Básica
// element: o elemento que sofrerá a interação
// change: o tipo de interação que será feita
// func: a função a ser executada quando a interação for feita no elemento
element.addEventListener(change, func);Exemplo
// quando o botão for pressionado, todas as imagens
// terão a classe 'avatar' ativada ou desativada
button = document.querySelector("#avatamize");
change = 'click';
const avatamize = () => {
// pegue todas as imagens
imgs = document.querySelectorAll('img');
// para cada uma delas
imgs.forEach((img) => {
// ative ou desative a classe 'avatar'
img.classList.toggle('avatar');
});
}
// adicione o event listener ao botão
button.addEventListener(change, avatamize);E se quisermos mudar apenas o elemento interagido?
// quando um botão for pressionado, somente ele terá
// sua cor transformada para verde
buttons = document.querySelector("button");
// o event listener é adicionado a um elemento apenas
// não podemos fazer 'buttons.addEventListener...'
buttons.forEach((button) => {
// o event listener passa como parâmetro para nossa
// função o evento ocorrido (event)
button.addEventListener('click', (event) => {
console.log(event);
// event.currentTarget nos retorna o elemento interagido
console.log(event.currentTarget);
event.currentTarget.style.backgroundColor = 'green';
});
});Asyncronoux Javascript And XML
AJAX é uma das maiores ferramentas para o desenvolvimento moderno de aplicações Web. É com ele que conseguimos fazer requisições HTTP sem termos que recarregar a página, realizando as modificações necessárias na mesma de acordo com o que recebermos de resposta e manipulando o DOM
https://www.google.com/search?q=danoninho
Tipos de requisições (Verbos):
Exemplo de header (como mandamos nossa requisição)
Exemplo de body (o que mandamos em nossa requisição)
// Oh meu deus, é um JSON!
{
nome: 'João',
familia: 'Starks'
}Executa o request (GET, por padrão) passado, sem body
link = "http://localhost:8000/"
// faça a requisição e mostre a resposta dela
fetch(link).then((response) => console.log(response))Entenda mais sobre Promises, essencial para AJAX
Executa o request passado, com body
link = "http://localhost:8000/"
// Para mandar informações em Body, precisamos seguir alguns
// passos minimos:
// 1. Mudar o método (Verbo)
let method = 'POST';
// 2. Montar nosso Body em JSON
let body = {nome: 'João', familia: 'Starks'};
// 3. Transformar nosso JSON para String usando JSON.stringify
body = JSON.stringify(body)
// 4. Montar um JSON com o method e o Body criados
let info = {method: method, info: info}
// faça a requisição, passando estas informações
fetch(link, info).then((response) => console.log(response))Responses são difíceis de trabalhar. Melhor transformá-las em JSON antes
link = "http://localhost:8000/"
// A estrutura mais comum de um fetch é transformar
// a resposta em JSON primeiro, e então utilizá-la
fetch(link)
.then(response => response.json())
.then((data) => {
// O que quisermos fazer com o que for retornado
});Postman é uma boa ferramenta para isso!