cefet_web

JavaScript parte 1

História e Características da linguagem


Hoje veremos…

  1. História e características
  2. Tipos de dados, Variáveis e Funções
  3. Condicionais, Vetores e Estruturas de Repetição
  4. Mais sobre funções e Métodos úteis

História e características

Introdução a JavaScript

  1. História
  2. O que é JavaScript
  3. Como incluir na página

História (1/2)

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) ~ Foto de Brendan Eich 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


História (2/2)

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


Logo da linguagem JavaScript O que é JavaScript?


Como usar em uma página Web


Três formas de inclusão


Inclusão em páginas

  1. Embutida :thumbsdown:
    <script>
      // código javascript aqui
    </script>
    
    • Não reaproveita entre arquivos, mistura com HTML
  2. Inline :thumbsdown::thumbsdown::thumbsdown:
    <button onclick="javascript: alert();">Mensagem</button>
    
    • Nenhum reaproveitamento, mistura uma mesma linha

Onde incluir?

  1. O navegador precisa baixar o arquivo JS e executá-lo , enquanto faz parsing do HTML
  2. Durante a execução os navegadores podem interromper o parsing do HTML
  3. Regra geral: adiar a execução (para bloquear a página depois que já tiver sido desenhada)

hello-world.js e imprimindo no console

  1. Um arquivo JavaScript incluído por um HTML é baixado e executado linha a linha
  2. Para testar escrevemos no console do navegador com
    console.log('.......');
    
  3. Também pode abrir uma janelinha
    window.alert('......');
    
    • …mas não faça isto, jovem, porque essa janelinha é muito chata ;)

Tipos de Dados, Variáveis e Funções

Elementos da Linguagem JavaScript


Declarando variáveis (com let)


Outras formas de declarar variáveis (const/var)

  1. Usávamos (passado, old, não use) a palavra-chave var:
    var vegetal = 'batata';
    
    • Similar ao let mas tem alguns problemas:
      • Não possui escopo de bloco, mas de função
      • Pode ser usada até mesmo antes da declaração
    • Era a única forma até ~2012
    • Encontra-se códigos antigos na Web usando var

Fracamente tipada e dinâmica


Tipos de dados

  1. Para verificar o tipo de uma variável, usamos typeof
    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"
    

O tipo 1. Boolean O tipo 2. Number

  1. O tipo Boolean armazena um valor verdadeiro ou falso. Exemplo:
    let abelhinhaEstaVoando = true;
    let modoEscuro = false;
    let maioridade = idade >= 18;
    

O tipo 3. String


Manipulando Strings


O tipo 4. Null

O tipo 5. Undefined


O tipo 7. Object


Objetos conhecidos


Criando um objeto (2 formas)

  1. Na forma literal:
    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
    
    • Novas propriedades podem ser atribuídas mesmo após sua criação!
  2. Na forma do operador new:
    • let jogador = new Object();
      jogador.pontos = 1420;
      jogador.vidas = 2;
      
      • Contudo, desta forma sempre cria-se um objeto vazio e deve-se preenchê-lo

Objetos dentro de objetos

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'
    }
};

Métodos de objetos

const 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

Outros tipos, baseados em Object


Operadores


O que significa === (igualdade forte)?


O objeto Math (ver na 🌐 MDN)


Declarando e invocando funções

// DECLARA a função dizOla()
function dizOla() {
  console.log('olá queridão');
}
// INVOCA a função dizOla()
dizOla();  

Declarando parâmetros para funções

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'

Valor de retorno de funções


Condicionais, Vetores e Repetição

Arrays, for, while e variações


if/else (condicionais)

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 { }

Operador ternário (condicionais)


switch (condicionais)

let corDoSite = 'black';
switch (climaAgora) {
    case 'ensolarado':
      corDoSite = 'yellow';
      break;
    
    case 'nublado':
    case 'chuvoso':
      corDoSite = 'gray';
      break;

    default:
      corDoSite = 'white';
      break;
}

Vetores


Usando vetores

let listaDeCoisas = ['Aew', 35, true, [], 'outra string'];

for (forma tradicional)


for (formas mais legais)

  1. For of: for (let item of array)
    let cores = ['azul', 'rosa'];
    for (let cor of cores) {
      console.log(cor);
      // azul, rosa
    }
    
    • For each: array.forEach
      let cores = ['azul', 'rosa'];
      cores.forEach(function(cor) {
       console.log(cor);
       // azul, rosa
      });
      

while/do..while


Mais sobre funções, Métodos úteis

Mais coisas legais


Mais sobre funções


Função anônima (atribuída a variável)

  1. Declaração de função “tradicional”:
    function dizOla(nome) {
      console.log('olá ' + nome);
    }
    dizOla('submundo');
    
    • function + nome + (params)

Passando função como parâmetro


Função vs Método

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)


Métodos comuns de strings (1/3)

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'


Métodos comuns de strings (2/3)

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']


Métodos comuns de strings (3/3)

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'


Métodos comuns de vetores (1/3)


Métodos comuns de vetores (2/3)

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


Métodos comuns de vetores (3/3)

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'


Referências

  1. Capítulo 2 do livro “JavaScript: The Good Parts”
  2. Mozilla Developer Network (MDN)