1989 - 1993 ~ Tim Berners-Lee cria a WWW em CERN (European Organization for Nuclear Research) e a deixa aberta ao público
1994 ~ Håkon propõe uma linguagem para dar conta da responsabilidade de alterar a aparência de páginas web chamada CSS
1995 (maio)
~
Brendan Eich, funcionário do Netscape, criou (em 10 dias!!) uma
linguagem para alterar páginas dinamicamente - o Mocha
1995 (setembro) ~ LiveScript (novo nome) é lançado com a versão beta do Netscape 2.0
1995 (dezembro) ~ Nome virou JavaScript para aproveitar a fama do Java
1996 (agosto) ~ Microsoft adota o JavaScript sob o nome de JScript
1996 (novembro) ~ A Netscape submeteu o JavaScript para a Ecma international para padronização. A especificação recebeu o nome de ECMAScript
1997 ~ A Ecma International publicou a primeira versão
1998 ~ Versão 2 do ECMAScript
1999 ~ Versão 3 do ECMAScript
2009 ~ Versão 5 do ECMAScript
2013 - hoje
~ Versões 6-9+
do ECMAScript, que mudaram de nome para ES2015, ES2016, ES2017,
ES2018…
<script></script>
e
faz download do arquivo apontado ... <!-- dentro do HEAD -->
<script src="executa-no-inicio.js"></script>
</head>
<body>
...
<!-- última coisa antes de fechar /BODY -->
<script src="executa-no-fim-da-pagina.js"></script>
</body>
<script>
// código javascript aqui
</script>
<button onclick="javascript: alert();">Mensagem</button>
<script src="..."></script>
<script src="..." async></script>
<script src="..." defer></script>
<!DOCTYPE html>
<html>
<head>
<title>...</title>
</head>
<body>
<!-- ... -->
<script src="hello-world.js"></script>
</body>
</html>
// imprime no console do navegador
console.log('Hello world');
// abre uma janelinha infernal
window.alert('Sou das trevas');
console.log('.......');
window.alert('......');
let
)let
para criar variáveis:
let alunosMatriculados = 20; // isto aqui é um comentário
let qtdeHorasAula = 66.5; /* aqui também (de bloco) */
let nomeAula = 'js0';
let
pode ser lido como “seja”, tipo assim:
seja uma variável ‘
nomeAula
’ com o valor ‘js0
’
(const/var)
const
para criar variáveis que sempre apontam para o mesmo valor
const fruta = 'abacate';
fruta = 'pera';
// Uncaught TypeError:
// Assignment to constant variable.
const
sempre que se sabe que a variável não receberá um novo valorvar
:
var vegetal = 'batata';
let
mas tem alguns problemas:
var
let nota = 10; // tipo numérico
let aluno = 'Adamastor'; // tipo string
const
):
let nota = 10; // nota é númerico
nota = 'Dó'; // agora virou string
1. Boolean
2. Number
3. String
4. Null
5. Undefined
6. Symbol
7. Object
Object
…Object
e seus tipos derivados em próximas aulastypeof
let vacinou = true;
console.log(typeof vacinou);
// imprime "boolean"
let nota = 10;
console.log(typeof nota);
// imprime "number"
let aluno = 'Adamastor';
console.log(typeof aluno);
// imprime "string"
let inimigo = {
vida: 100,
nome: 'Slime'
};
console.log(typeof inimigo); // impr. "object"
let abelhinhaEstaVoando = true;
let modoEscuro = false;
let maioridade = idade >= 18;
double
de C/Java)let a = 5;
let b = 5.674; // 5 vírgula 674
let c = a + b; // 10.674
let d = 2 ** 4; // 16 (2 elevado a 4)
let e = Math.sqrt(25); // 5 (raiz quadrada de 25)
let f = Math.random(); // [0,1] - algo entre 0 e 1
char
como em C/C++ e Java, apenas string :wink:"Abc" === 'Abc' // simples é mais legal!! mas basta ser consistente
length
com o seu comprimento:
console.log('Cachorro'.length); // 8
let aranhas = 'fofofauna';
const caminhoVideo = 'videos/a.mp4';
const nomeCompleto = primeiro + ' ' + ultimo;
console.log('c' + 'a' + 't'); // imprime 'cat'
const capitalDeMG = 'Betim';
console.log(capitalDeMG[0]); // imprime 'B'
'barba negra'.toUpperCase() === 'BARBA NEGRA'
'Mississippi'.indexOf('ss') === 2
'Orinoco'.replace('noco', '') === 'Ori'
'$'.repeat(3) === '$$$'
4. Null
null
let x = null;
console.log(typeof x); // imprime null¹
Usamos quando uma variável não tem um valor aplicável naquele momento ¹: bug typeof null
5. Undefined
undefined
let x;
console.log(typeof x); // imprime undefined
É o tipo padrão de variáveis que não foram associadas a nenhum valor
7. Object
let jogador = {
pontos: 1420,
vidas: 2
};
console.log(jogador.pontos);
// imprime 1420
undefined
pontos
, valor: 1420
vidas
, valor: 2
// notação ponto
console.log(jogador.vidas);
// notação colchete
console.log(jogador['vidas']);
Math
, console
, window
. Exemplos:
Math
possui uma propriedade:
Math.PI
(PI → 3.14159) (cujo valor é Number
)
console
possui uma propriedade
console.log
(log → function() {…})
window
possui uma propriedade
window.alert
(alert → function() {…})
let jogador = { // forma mais expressiva, curta e sexy 😎
pontos: 1420, // propriedades separadas por vírgula
vidas: 2
};
let jogador = {}; // um objeto vazio: { }
jogador.pontos = 1420; // criou jogador.pontos com valor 1420
jogador.vidas = 2; // criou jogador.vidas
new
:
let jogador = new Object();
jogador.pontos = 1420;
jogador.vidas = 2;
let voo = {
companhia: 'Gol',
numero: 815,
decolagem: {
IATA: 'SYD',
horario: '2004-09-22 14:55',
cidade: 'Sydney'
},
chegada: {
IATA: 'LAX',
horario: '2004-09-23 10:42',
cidade: 'Los Angeles'
}
};
voo
, com as propriedades:
companhia
numero
decolagem
chegada
decolagem
e chegada
são objetos por si mesmosconst loja = {
livros: [ // prop. é um vetor
'macunaíma',
'torre negra'
],
dinheiro: 500, // propri. é number
// método vender
vender: function() { // p. é função
this.dinheiro += 15;
}
};
loja.vender(); // loja.dinheiro = 515
loja.vender(); // loja.dinheiro = 530
this
Object
Existem outros tipos complexos, que são baseados em Object
:
Date
~ Por exemplo, para imprimir o horário atual no console:
js
let agora = new Date();
console.log(agora); //Sun Jan 17 2021 18:11:46...
Function
~ (sim! funções são objetos em JavaScript)
Array
~ (vetores também são objetos)
SeuProprioTipo
™
~ (é possível criar novos tipos também)
+
soma -
subtração*
multiplicação**
exponenciação/
divisão%
resto da divisão++
incremento --
decremento=
simples += /= %=
composta==
igualdade===
igualdade forte (!!)!=
desigualdade!==
desigualdade forte (!!)!
não &&
e ||
ou ===
(igualdade forte)?==
:
console.log('1' == 1); // imprime true
==
tenta converter um elemento no tipo do outro e depois
compara1
em '1'
e só então compara===
:thumbsup::
console.log('1' === 1); // imprime false
Math
(ver na 🌐 MDN)+, -, /, *
), existem
outras funções matemáticas acessíveis via o objeto Math
:
const pi = Math.PI; // a constante pi
let a = Math.sin(1); // seno de 1 radiano
let b = Math.cos(pi); // cosseno de pi radianos
let c = Math.pow(5, 2); // 5 elevado a 2 (= 5**2)
let d = Math.sqrt(100); // raiz quadrada de 100
let e = Math.random(); // nº aleatório entre [0, 1]
let f = Math.round(0.5); // arredonda p/ inteiro mais próximo (1)
let g = Math.floor(0.5); // arredonda p/ baixo ("chão": 0)
let h = Math.ceil(0.5); // arredonda p/ cima ("teto": 1)
function
+ nome + parâmetros + corpo ➜
// DECLARA a função dizOla()
function dizOla() {
console.log('olá queridão');
}
// INVOCA a função dizOla()
dizOla();
function dizOla(nome, pronome) {
console.log('olá ' + pronome + ' ' + nome);
}
dizOla('enfermeira', 'srta.');
// imprime 'olá srta. enfermeira'
dizOla('jujuba', '');
// imprime 'olá jujuba'
dizOla();
// imprime 'olá undefined undefined'
undefined
function elevaAoCubo(numero) {
return numero ** 3;
}
elevaAoCubo(2); // retorna 8
elevaAoCubo(3); // retorna 27
function hipotenusa(cateto1, cateto2) {
let somaQuadrados = cateto1 ** 2 + cateto2 ** 2;
return Math.sqrt(somaQuadrados);
}
hipotenusa(3, 4); // retorna 5
return
.
Se não houver a palavra-chave, a função tem um return undefined
implícitofunction imprimeNome(primeiro, ultimo) {
console.log(primeiro + ' ' + ultimo);
}
// retorna undefined
function imprimeNome(primeiro, ultimo) {
console.log(primeiro + ' ' + ultimo);
return undefined;
}
if (hora < 12) {
manha = true;
} else {
manha = false;
}
if (nome === 'Robervaldo') {
conceito = 'A';
} else if (nome === 'Ana') {
conceito = 'B';
} else {
conceito = 'C';
}
if (estouComSono)
dormir(); // mas evite omitir { }
true
ou false
. Ex:
nome === 'Ana'
ano < 2000
ano % 4 === 0
!jaEstudei
hp > 0 && (balas || granada)
if
/else
, é possível omitir as chaves (como em C/C++, Java)
if/else
“simples”, pode ser mais legível fazer a verificação em 1 linha com o operador ternário ?:if (armaduraForte) {
hp -= 10;
} else {
hp -= 50;
}
// mesmo código, em 1 linha
hp -= armaduraForte ? 10 : 50;
CONDICAO_TESTE ? VALOR_SE_TRUE : VALOR_SE_FALSE;
let corDoSite = 'black';
switch (climaAgora) {
case 'ensolarado':
corDoSite = 'yellow';
break;
case 'nublado':
case 'chuvoso':
corDoSite = 'gray';
break;
default:
corDoSite = 'white';
break;
}
switch
+ (expressão)case
+ valor para a expressãobreak
para sair
default
para pegar outros valores (equivalente ao else
)let notas = [10, 4, 7, 8, 8];
let cores = ['azul', 'verde'];
let animais = []; // <- vetor vazio
console.log(notas.length); // impr. 5
console.log(cores.length); // impr. 2
Assim como string, um vetor tem um comprimento (propriedade length
):
let listaDeCoisas = ['Aew', 35, true, [], 'outra string'];
let listaDeCoisas = ['Aew', 35, true, [], 'outra string'];
[
e ]
para acessar um item do array
console.log(listaDeCoisas[1]); // imprime 35
listaDeCoisas[0] = ''; // altera primeiro elemento
console.log(listaDeCoisas[0]); // imprime string vazia
let frutas = []; // cria um array vazio
frutas.push('kiwi'); // coloca 'kiwi' no array
console.log(frutas); // imprime ['kiwi']
Forma tradicional com for (inicio; condicao; incremento)
:
for (let i = 0; i < 10; i++) {
console.log(i); // 0, 1, 2 ... 9
}
let cores = ['azul', 'rosa'];
for (let i = 0; i < cores.length; i++) {
console.log(cores[i]); // azul, rosa
}
for (let item of array)
let cores = ['azul', 'rosa'];
for (let cor of cores) {
console.log(cor);
// azul, rosa
}
array.forEach
let cores = ['azul', 'rosa'];
cores.forEach(function(cor) {
console.log(cor);
// azul, rosa
});
let i = 1;
while (i !== 10) {
console.log(i);
i++;
}
let i = 0;
do {
i++;
console.log(i);
} while (i !== 10);
function dizOla(nome) {
console.log('olá ' + nome);
}
dizOla('submundo');
function
+ nome + (params)let dizOla = function(nome) {
console.log('olá ' + nome);
};
dizOla('submundo');
function estudar(aluno, fnAprender) {
console.log(aluno + ' aprendeu ' + fnAprender());
}
Vamos criar uma função que recebe outra como parâmetro →→→
estudar(...)
devemos passar uma função no segundo argumento function lerHarryPotter() { function lerOlavoCarvalho() {
return 'criatividade'; return '?';
} }
let lerDarcyRibeiro = function() {
return 'sociologia';
}
estudar(...)
:
estudar('André', lerHarryPotter); // 'André aprendeu criatividade'
estudar('Luiz', lerDarcyRibeiro); // 'Luiz aprendeu sociologia'
estudar('Jair', lerOlavoCarvalho); // 'Jair aprendeu ?'
Função ~ sozinha no mundo, ninguém é dono dela ~ exemplo: todas as que vimos
Método
~ nasceu de algum objeto, ele tem dono
~ acesso ao ponteiro this
(próximas aulas)
~ ex: as funções das strings, dos vetores (e outros)
// 'dobra' é uma função
function dobra(n) {
return 2 * n;
}
let nota = 5;
dobra(nota);
// sqrt() é método de Math
nota = Math.sqrt(25);
// toLowerCase() é método
// das strings
'HaNa MonTAna'.toLowerCase();
Toda string possui vários métodos diferentes que podemos invocar
texto.length
~ não é um método, mas retorna quantos caracteres
~ 'trem'.length === 4
texto[i]
~ não é um método, mas retorna o i-ésimo caractere
~ 'trem'[3] === 'm'
texto.toLowerCase()
~ método que retorna tudo em minúsculas
~ 'Doug'.toLowerCase() === 'doug'
texto.toUpperCase()
~ método que retorna tudo em maiúsculas
~ 'Doug'.toUpperCase() === 'DOUG'
texto.trim()
~ método que remove espaços em branco ao redor
~ ' mosca '.trim() === 'mosca'
t.indexOf(trecho)
~ método que retorna a posição do trecho
no texto
(ou -1)
~ 'Thanos'.indexOf('os') === 4
t.substr(ini, tam)
~ método que retorna um trecho dado início e tamanho
~ 'Pronto'.substr(0, 2) === 'Pr'
t.includes(trecho)
~ método que verifica se texto contém o trecho
~ 'Hakuna'.includes('ku') === true
t.split(separad)
~ método que retorna um vetor de trechos
~ 'Banana'.split('a') === ['B', 'n', 'n']
t.startsWith(trech)
~ método que verifica se começa com o trecho
~ 'Hakuna'.startsWith('Ha') === true
t.endsWith(trecho)
~ método que verifica se termina com o trecho
~ 'Hakuna'.endsWith('na') === true
t.replace(tr, novo)
~ método que substitui um trecho por algo novo
~ (apenas primeira ocorrência)
~ 'ana'.replace('a', 'e') === 'ena'
t.replaceAll(tr, n)
~ método que substitui um trecho por algo novo
~ (todas as ocorrências)
~ 'ana'.replaceAll('a', 'e') === 'ene'
Assim como as strings, os vetores também possuem vários métodos úteis
vetor.length
~ não é método, mas retorna tamanho do vetor
~ [5].length === 1
vetor[i]
~ não é método, mas retorna i-ésimo elemento
~ [3, 10][0] === 3
~ js
let letras = ['x'];
letras[0] = 'y';
vetor.push(elem)
~ método que insere elem
ao final do vetor
~ ['a'].push('b') === ['a', 'b']
vetor.pop()
~ método que remove último elemento
~ ['a', 'b'].pop() === ['a']
vetor.indexOf(elem)
~ método que retorna o índice do elemento no vetor (ou -1)
~ [5,6,7].indexOf(5) === 0
~ [5,6,7].indexOf(2) === -1
vetor.reverse()
~ método que inverte a ordem dos elementos
~ [1,2,3].reverse() === [3,2,1]
vetor.sort()
~ método que coloca os elementos em ordem
~ [8,1,-6].sort() === [-6,1,8]
~ ['f', 'b'].sort() === ['b', 'f']
vetor.join(spacer)
~ método que retorna uma string juntando os elementos
~ ['fl', 'rb'].join(' ') === 'fl rb'
~ ['fl', 'rb'].join('+') === 'fl+rb'