6. JavaScript
Introdução a Javascript, a linguagem de programação mais utilizada na Web
Last updated
Was this helpful?
Introdução a Javascript, a linguagem de programação mais utilizada na Web
Last updated
Was this helpful?
Objetivos de aprendizagem
Conhecer a linguagem de programação Javascript
Entender a sintaxe básica da linguagem
Entender como utilizá-la no lado cliente, junto com HTML
JavaScript é uma linguagem de programação multiparadigma (procedural, orientada a objetos, funcional) e multiplataforma. É uma linguagem leve. É uma linguagem bem leve e que não necessita de muitos recursos para utilizá-la, basta um navegador Web. Javascript roda dentro do navegador, do lado cliente. Também pode ser executado no lado servidor, por meio da plataforma ou .
JavaScript foi criada em 1995 por h quando ele trabalhava na Netscape. Atualmente é a .
Inicialmente, Javascript era utilizado somente do lado cliente, sendo executado diretamente pelo navegador, mas com o surgimento do Node.js, a linguagem deve grande adoção do lado servidor, sendo bastante utilizada para construção de APIs e aplicações de back-end em geral.
A popularidade do Javascript ganhou bastante força devido sua utilização por diversos frameworks de front-end., tais como , , e .
Diante disso, eu diria que dominar a linguagem Javascript é fundamental para qualquer desenvolvedor Web, se você trabalha com front-end é obrigatório saber Javascript.
Nas próximas seções vamos aprender a sintaxe básica da linguagem, tipos de dados, controle de fluxo, laços de repetição e funções.
JavaScript é uma linguagem dinamicamente tipada. Isso significa que você não precisa especificar o tipo de dado quando vai declarar uma variável. O tipo de dado da variável é inferido automaticamente a partir do seu valor.
Declaração de variáveis e constantes
Em Javascript, podemos declarar variáveis utilizando a palavra-chave var
ou let
.
var
- declara uma variável, opcionalmente, inicializando-a com um valor. Atualmente não é recomendado o uso de var
. Veja abaixo um exemplo de declaração de varável com var
:
let
- declara uma variável, opcionalmente, inicializando-a com um valor. O let
foi introduzido na versão 6 do Javascript. Variáveis declaradas com let
possuem escopo mais restrito do que as variáveis declaradas com var
(vamos explicar mais sobre escopo nas próximas seções). Veja abaixo um exemplo de declaração de varável com let
:
Além de variáveis, podemos declarar constantes, para isso utilizamos a palavra-chave const
.
const
- declara uma constante de escopo de bloco, que deve ser inicializada na declaração e após sua inicialização é utilizada somente para leitura.Veja abaixo um exemplo de declaração de varável com const
:
Comentários, uso de aspas e ponto e vírgula
No Javascript há duas formas de definir comentários, //
para comentários de uma linha e /* */
para comentários de múltiplas linhas. Veja os exemplos abaixo:
Como a maioria das linguagens de programação strings literais são colocadas entre aspas, no Javascript qualquer coisa (zero ou mais caracteres) entre aspas é uma string. Uma característica peculiar do Javascript é que podemos criar strings literais usando aspas duplas ("
) ou aspas simples ('
). No entanto, é importante destacar que a string deve ser delimitada por aspas do mesmo tipo; ou seja, as duas aspas simples ou ambas aspas duplas. Veja alguns exemplos de strings literais:
Outro ponto a se destacar em relação à sintaxe do Javascript é a utilização do ponto e vírgula, que é opcional, ou seja, não é obrigatório adicionar ponto e vírgula no final de suas declarações. No entanto, é recomendado seguir um padrão, ou utiliza-se ponto e vírgula em todas as suas declarações ou não em nenhuma.
Como citado anteriormente, não é necessário informar o tipo de dado quando vamos declarar uma variável ou constante em Javascript, mas internamente o Javascript atribui um tipo de dado para suas variáveis e constantes inferidos de seus respectivos valores.
O Javascript possui seis tipos de dados primitivos:
Boolean
- armazena valores lógicos: true
e false
.
null
- palavra-chave que indica valor nulo.
undefined
- indefinido, identifica a falta de valor para uma determinada variável é.
Number
. - armazena valores numéricos, inteiros e de ponto flutuantes: 42
ou 3.14159
.
String
- armazena uma sequência de caracteres: "bob"
Symbol
(novo em ECMAScript 6). Um tipo de dado cuja as instâncias são únicas e imutáveis (pouco utilizado ainda).
Além dos tipos primitivo, há também o tipo Object
.
Object
- (Objeto) - é um tipo mais dinâmico, que ao desenvolvedor criar atributos e métodos, além de já possuir um conjunto de métodos pré-definidos. Geralmente, cria-se objetos para agrupar valores em uma única referência. Veja um exemplo abaixo da notação literal de um objeto:
Como visto no exemplo acima, usando notação literal, um objeto é definido por um conjuntos de chave-valor separados por dois pontos :
, entre chaves, a chave identifica a propriedade do objeto.
Podemos acessar o valor de uma propriedade do objeto ou atribuir um novo valor seguindo a sintaxe de objeto.propriedade
. Veja o exemplo abaixo:
Esta seção apresenta e descreve os principais operadores do Javascript, aqueles que você vai utilizar frequentemente.
Operador de atribuição
Um operador de atribuição básico é o igual "=". Seu funcionamento é bem simples, ele atribui o valor do elemento à sua direita ao elemento à sua esquerda. O valor da direita pode vir de um valor literal (um número, uma string, etc.), de uma variável ou de uma expressão. Veja exemplos abaixo:
Operadores aritméticos
Operadores aritméticos são utilizados para fazer operações com valores numéricos (sejam literais ou variáveis), o resultado de uma operação aritmética sempre retorna um único valor numérico. Os operadores aritméticos padrão são os de soma (+)
, subtração (-)
, multiplicação (*)
e divisão (/)
.
Outro operador muito utilizado em linguagens de programação é o operador de módulo, ele retorna o inteiro restante da divisão entre dois número, no Javascript utiliza se o símbolo de porcentagem (%) como operador módulo. Veja o exemplo:
O operador módulo é muito utilizado para verificar se um determinado número é par ou ímpar, basta pegar o número e fazer o módulo por 2, qualquer número par retornará 0.
Operadores de comparação
Um operador de comparação compara seus operandos (valores da esquerda e direita) e retorna um valor lógico baseado na comparação, que poder ser verdadeira ou falsa. Veja na tabela abaixo os principais operadores de comparação.
Operador
Descrição
Exemplo
==
Retorna verdadeiro caso os valores dos operandos sejam iguais.
5 == 5 // true
5 == 3 // false
5 == '5' // true
!=
Retorna verdadeiro caso os valores dos operandos não sejam iguais.
5 != 5 // false
5 != 3 // true
===
Retorna verdadeiro caso os valores dos operandos sejam iguais e do mesmo tipo.
5 === 5 // true
5 === 3 // false
5 === '5' // false
>
Retorna verdadeiro caso o operando da esquerda seja maior que o da direita.
5 > 5 // false
5 > 3 // true
>=
Retorna verdadeiro caso o operando da esquerda seja maior ou igual ao da direita.
5 >= 5 // true
5 >= 3 // true
5 >= 6 // false
<
Retorna verdadeiro caso o operando da esquerda seja menor que o da direita.
5 < 5 // false
4 < 7 // true
<=
Retorna verdadeiro caso o operando da esquerda seja menor ou igual ao da direita.
5 <= 5 // true
4 <= 7 // true
5 <= 3 false
Operadores Lógicos
Operadores lógicos são utilizados tipicamente com valores lógicos (true ou false
), neste caso, retornam um valor lógico (true ou false
). Veja os operadores lógicos na tabela abaixo:
Operador
Descrição
&&
Operador AND (e): Retorna verdadeiro caso ambos operandos sejam verdadeiros; caso contrário, retorna falso.
Ex.: expr1 && expr2
- Retorna true se expr1
e expr2
forem verdadeiras, se pelo menos uma for falsa retorna false
||
Operador OR (ou): Retorna verdadeiro caso ambos ou pelo menos um dos operandos sejam verdadeiro; se ambos forem falsos, retorna falso.
Ex.: expr1 && expr2
- Retorna true se expr1
ou expr2
for verdadeira, ou ambas. E retorna false se somente se expr1
e expr2
forem falsas.
!
Operador de negação, retorna o valor lógico contrário.
Ex.: !true
- Retorna false; !false
- Retorna true.
Há diversos tipos de declarações para controle de fluxo na linguagem Javascript, tais como declarações condicionais e laços de repetição.
Declarações de controle de fluxo são utilizadas para deixar o código mais flexível, onde o mesmo trecho de código pode ter fluxos de execuções diferentes dependendo da interação do usuário.
Controle de fluxo é realizado por meio de declarações em bloco. Uma declaração em bloco é utilizada para agrupar declarações. No Javascript, um bloco é delimitado por um par de chaves.
A seguir conheceremos as principais declarações para controle de fluxo no Javascript.
Uma declaração condicional é um conjunto de comandos executados caso uma condição especificada seja verdadeira. Podemos criar declarações condicionais utilizando duas estruturas: if..else
ou switch
.
Declaração condicional com if...else
Use a declaração if
aplicada a uma condição lógica (true ou false) para executar alguma declaração caso a condição lógica seja verdadeira. Use a cláusula opcional else
para executar alguma declaração caso a condição lógica passada para o if
seja falsa.
Uma declaração condicional com if...else é declarada da seguinte maneira:
No exemplo acima, condicao
deve ser uma expressão lógica, que retorna um valor true
ou false
.
O if...else
simples é suficiente para testar uma condição lógica, mas em alguns casos há a necessidade de testar duas ou mais condições lógicas em sequência, nesse caso, é possível combinar declarações com else if
para testar condições lógicas em sequência. Veja o exemplo abaixo:
Em Javascript, alguns valores padrões são avaliados com false, veja abaixo:
false
undefined
null
0
NaN
''
(string vazia)Todos os outros valores, incluindo todos os objetos, são avaliados como verdadeiros quando passados para uma declaração condicional.
Declaração switch
O switch
é uma declaração de múltipla escolha, similar a uma série de declarações if
na mesma expressão. É recomendado sua utilização para testar um conjunto de condições pré-definidas.
Uma declaração switch
permite que um programa avalie uma variável e tente associar o valor da variável ao rótulo de um case
. Se uma correspondência é encontrada (o valor da variável é igual a um dos rótulos case
), o programa executa a declaração associada aquele case. Caso nenhuma correspodência seja encontrada é executada a declaração padrão definida no comando default
. Uma declaração switch
se parece com o seguinte:
Segue a explicação de cada um dos comandos da declaração acima:
switch
: recebe a variável(ou expressão) que armazena o valor responsável pelo controle de escolhas.
case
: lista todos os possíveis valores esperados para a variável do comando switch;
break
: comando que encerra a execução do switch;
default
: é executado caso nenhum rótulo seja encontrado, não é obrigatório o uso desse comando (mas recomendo utilizá-lo sempre).
As declarações de repetição (também conhecidas como laço) oferere um forma simples de executar ações repetidas, ou seja, executar repetidas vezes um mesmo trecho de código. No Javascript, há diversos tipos de declarações para execução de repetição, no entanto vamos focar apenas em dois, que são os mais utilizados, você vai resolver 99,99% do problemas de repetição com eles.
Declaração for
Quando um for
é executado, ocorre os seguintes passos:
A expressaoInicial
é inicializada e, caso atenda a condição especificada, é executada.
A condicao
é avaliada. caso o resultado de condicao
seja verdadeiro, o laço é executado. Se o valor de condicao
é falso, então o laço terminará.
As instruções, que geralmente devem ser envolvidas por um par de chaves {...}, são executadas enquanto a condição for verdadeira.
Em cada repetição o incremento
deve ser atualizado e retorna o controle para o passo seguinte, onde a condição é novamente verificada (passo 2).
Vamos de um exemplo prático, caso tenhamos uma lista de nomes para ser exibida, temos que percorrer toda a lista para exibir cada nome individualmente. Nesse caso, podemos muito bem usar o laço for
, veja o código abaixo:
let index = 0;
é a expressão inicial, onde é criado uma variável chamada index e atribuído o valor 0 a ela;
index < nomes.length;
- é a condição, onde verifica se a variável index é menor do que o tamanho do array nomes;
index++;
- é o incremento, ou seja, soma se mais 1 a variável index a cada repetição do laço
Diante disso, o laço acima será executado 3 vezes:
Na primeira repetição, o index
é 0, menor do que o tamanho do array de nomes
que é 3, então é executada a instrução dentro do bloco for
: console.log(nomes[index])
, exbindo o primeiro nome no console "Jesiel", ao final da repetição é incrementado 1 à variável index
;
Na segunda repetição, o index é 1, menor do que o tamanho do array de nomes
que é 3, então é executada a instrução dentro do bloco for
: console.log(nomes[index])
, exbindo o segundo nome no console "Viana", ao final da repetição é incrementado 1 à variável index
;
Na terceira repetição, o index é 2, menor do que o tamanho do array de nomes
que é 3, então é executada a instrução dentro do bloco for
: console.log(nomes[index])
, exbindo o terceiro nome no console "Jesiel", ao final da repetição é incrementado 1 à variável index
;
Na tentativa da quarta repetição, o index
é 3 que é igual ao tamanho do array de nomes
que também é 3, nesse caso a condição do for
é considerada falsa e o laço for é encerrado.
O teste da condição ocorre antes que o laço seja executado. Desta forma se a condição for verdadeira o laço executará e a cada repetição testará a condição novamente. Quando a condição for falsa o laço termina e passa o controle para as instruções após o laço.
A condição deve ser modificada dentro do bloco while
, porque uma vez que a condição seja verdeira e se ela nunca for modificada dentro do bloco while
, o laço entrarar num ciclo de repetição infinita.
Um ponto chave na resolução de um problema complexo é conseguir dividi-lo em subproblemas menores.
Ao criarmos um programa para resolver um problema, é essencial quebrar um código grande em partes menores, fáceis de serem entendidas e administradas. Costumamos chamar essa prática de dividir para conquistar:
Um problema é dividido em diversos subproblemas;
As soluções dos subproblemas são combinadas numa solução do problema maior;
Na programação para solucionar o problema que foi "quebrado" em subproblemas criamos um programa dividido em subprogramas. Em Javascript estes subprogramas são chamados de funções.
Uma função é uma sequência de comandos que executa alguma tarefa, pode retornar algo ou não e tem um nome. A sua principal finalidade é nos ajudar a organizar programas em pedaços que correspondam a como imaginamos uma solução do problema.
Resumindo, funções são blocos de instruções que realizam tarefas específicas.
Uma função consiste em um nome que é dado a uma sequência de comandos de forma que, quando os programas correspondentes precisam dela, basta chamá-la pelo seu nome em vez de ter que copiar seu código ou programá-la totalmente de novo.
Funções são importantes porque permitem que programadores abstraiam certas sequências de comandos que são utilizadas com frequência.
Sintaxe de uma função Javascript:
function
- palavra reservada para iniciar uma função (obrigatório);
nomeDaFuncao
- nome da função, sempre deve vir acompanhado de parênteses (obrigatório);
parametros
- variáveis que serão usadas dentro da função (opcional);
{}
- chaves definem o escopo da função (obrigatório);
instruções
- declarações que serão executados dentro da função (obrigatório);
return valor
- valor devolvido para o invocador da função o resultado da execução desta (opcional).
Veja mais exemplos de funções:
Descrição das funções acima:
A função raizQuadradaDe
recebe um numero
com parâmetro (entre parênteses) e retorna a raiz quadrada desse número.
Já a função exibeNoConsole
recebe um valor
como como parâmetro e imprime esse valor no console. Esta função não tem retorno.
Também podemos criar funções sem parâmetros, ou seja, funções que não tem nada entre os seus parênteses.
Quando declaramos uma variável fora de qualquer bloco de instruções, ela é chamada de variável global, porque está disponível para qualquer outro código no documento atual. Quando você declara uma variável dentro de uma função ou um bloco de instruções (if, for, while
), ela é chamada de variável local, pois ela está disponível somente dentro desse bloco ou função. O escopo de bloco e funções no Javascript é definido por um par de chaves. Veja exemplos abaixo:
Veja os detalhes de escopo de acada variável do exemplo acima:
x
- variável global, visível em qualquer parte do arquivo Javascript em que ela está declarada, ou seja, pode ser acessada dentro do bloco if
, dentro da função executa
, etc.
y
- variável de escopo de bloco, só pode ser acessada dentro do bloco if
onde ela foi declarada, a delimitação do escopo do bloco é baseada nas chaves (linhas 3 e 5 do exemplo acima)
z
- variável de escopo local, só pode ser acessada dentro da função (executa
) onde ela foi declarada, a delimitação do escopo da função é baseada nas chaves (linhas 7 e 9 do exemplo acima)
JavaScript antes do ECMAScript 6 (2015) não possuía escopo de declaração de bloco; pelo contrário, uma variável declarada dentro de um bloco de uma função era uma variável local e quando declarada dentro de um bloco global era uma variável global.
Essa modificação do escopo de variáveis no ECMAScript 6 ocorreu pela inserção da palavra chave let
para criação de variáveis.
let
permite que você declare variáveis limitando seu escopo no bloco, instrução, ou em uma expressão na qual ela é usada. Isso é inverso da palavra chave var
, que define uma variável globalmente ou no escopo inteiro de uma função, independentemente do escopo de bloco. Veja o exemplo abaixo para enteder melhor as diferenças de escopo entre let e var.
A código acima funciona até chegar a linha 10, vamos entender:
var a
- definie uma variável com escopo global dentro de um bloco if
let b
- definie uma variável com escopo de bloco dentro de um bloco if
Com isso, é possível acessar a variável a fora do bloco onde ela foi declarada, já a variável b só pode ser acessada dentro do bloco onde foi criada.
Array é uma estrutura de dados que armazena uma coleção de elementos (valores ou variáveis), cada elemento do array é identificado por um index, iniciando por 0. O promeiro elemento do array está no index 0, o segundo elmento no index 1 e assim sucessivamente.
Em Javascript, os Arrays são objetos que vêm com uma série de métodos embutidos para realizar operações de travessia e mutação. Nem o tamanho de um array JavaScript nem os tipos de elementos são fixos. Já que o tamanho de um array pode ser alterado a qualquer momento por meio de operações de adição e remoção de elementos, assim também como podemos adicionar tipos de dados diferentes em um mesmo array.
Veja os exemplos de criação e manipulação de arrays abaixo, com código comentado:
Umas das principais utilidades do Javascrip no lado cliente é a manipulação de elementos HTML, se quiser aprender como manipular elementos HTML e deixar sua página Web dinâmica e interativa veja o vídeo abaixo:
Eu uso e recomendo utilizar sempre aspas simples, por ser a forma mais utilizada, inclusive é recomendado pelo .
A declaração é repetido até que a condição especificada seja falsa. Uma declaração for
tem a seguinte sintaxe:
Uma declaração executa suas instruções, desde que uma condição especificada seja avaliada como verdadeira. Segue uma declaração while
:
Diante disso, evite usar o var para definição de variáveis, USE SEMPRE let para criação de variáveis e tenha mais controle do seu escopo ().
No exemplo acima, os comentários do código descreve todas as operações realizadas. Para saber mais sobre Javascript Arrays, acesse: