├── 1_Introducao └── 1_Hello-World.md ├── 2_Resumo └── 1_Resumo.md ├── 3_Ambiente └── 1_Editores-e-plugins.md ├── 4_Basico ├── 10_Exceptions.md ├── 11_Operadores_de_Atribuicao.md ├── 12_PrincipaisMetodosArray.md ├── 13_Entendendo_o_this.md ├── 14_Objetos.md ├── 15_Promise.md ├── 1_Saida.md ├── 2_Comentarios.md ├── 3_Tipos-de-dados.md ├── 4_Variaveis.md ├── 5_Operadores-Aritmeticos.md ├── 6_Operadores-Logicos.md ├── 7_Condicionais.md ├── 8_Estruturas-de-repeticao.md └── 9_Funcoes.md ├── 5_DOM-DocumentObjectModel ├── 1_Introducao.md ├── 2_Metodos-DOM.md ├── 3_Acessando-Elementos.md ├── 4_Alterando-Elementos.md ├── 5_Removendo-Elementos.md ├── 6_Event-Handlers.md └── 7_Event-Listener.md ├── 6_Atividades ├── Atividades.txt └── Resolucao-Atividades-01.js ├── LICENSE ├── README.md └── assets ├── 3-1-saida-exemplo.png ├── gavetaObj.png ├── javascript.png ├── navigator.png ├── promise_catch_result.png ├── promise_then_result.png └── retorno_da_promise.png /1_Introducao/1_Hello-World.md: -------------------------------------------------------------------------------- 1 | ## 1.1 Hello World 2 | 3 | JavaScript é uma linguagem de programação que apareceu pela primeira vez na década de 90, com o intuito de dar aos navegadores seu primeiro tipo de funcionalidade inteligente. 4 | 5 | O JavaScript moderno é realmente um alvo amplo e comovente. Você pode ter aprendido JavaScript há cinco anos e algumas dessas técnicas podem ser consideradas antigas pelos padrões de hoje, assim como você conhece técnicas de JavaScript de mais de 20 anos atrás, que ainda são consideradas práticas recomendadas modernas. 6 | Aqui no nosso curso daremos um guia através dos vários detalhes de JavaScript para aprender o JavaScript moderno, como é conhecido hoje. 7 | 8 | ### Um pouco de história 9 | 10 | ECMAScript é a especificação na qual o JavaScript se baseia. Como especificação, significa que o ECMAScript é um modelo ao qual os motores JavaScript (implementações) devem aderir. O ECMAScript esteve relativamente estagnado até 2015 com o aparecimento do *ECMAScript 6* - antes disso, o ECMAScript 3 foi publicado em 1999, o ECMAScript 4 foi abandonado, o ECMAScript 5 foi publicado em 2009 e o ECMAScript 5.1 foi publicado em 2011. 11 | 12 | O lançamento do ECMAScript 6 em 2015 marcou mudanças significativas para abordar os recursos exigidos pelo crescimento explosivo do JavaScript. E a velocidade das alterações de recursos foi tão grande que o ECMAScript 7 se tornou realidade em 2016 e o ​​ES8 em 2017. 13 | 14 | #### Por que isso é importante? 15 | 16 | Porque você enfrentará constantemente situações em que o JavaScript comum é compatível com ES5 / ES5.1, ES6, ES7 ou ES8. 17 | 18 | Será JavaScript da mesma forma, mas não será executado em todos os motores JavaScript, porque estes estão em constante fluxo para suportar diferentes versões do ES. 19 | 20 | ### Motores JavaScript 21 | 22 | *Para ficar claro, um "motor JavaScript" é basicamente um programa que lê código JavaScript e roda ele.* 23 | 24 | A seguir, é apresentada uma lista dos principais motores JavaScript e seu suporte a ES: 25 | 26 | ##### SpiderMonkey 27 | 28 | Usado pelo navegador Firefox e Adobe Acrobat. Suporta ES5.1, recursos do ES6, ES7 e ES8. 29 | 30 | ##### V8 31 | 32 | Usado pelo navegador Google Chrome, Opera e Node.js. Suporta ES6 e recursos do ES7 e ES8. 33 | 34 | ##### WebKit 35 | 36 | Usado pelo navegador Apple Safari. Suporta ES6 e recursos do ES7 e ES8. 37 | 38 | ##### Chakra 39 | 40 | Usado pelo navegador Microsoft Edge. Suporta ES5.1 e recursos do ES6, além de alguns recursos do ES7. 41 | 42 | [Proximo Capitulo](../2_Resumo/1_Resumo.md) -------------------------------------------------------------------------------- /2_Resumo/1_Resumo.md: -------------------------------------------------------------------------------- 1 | # 2.1 Resumo 2 | 3 | ## JavaScript 4 | 5 | O JavaScript é uma linguagem de programação interpretada, conhecida também como linguagem de script em alto nível para páginas Web, sendo uma linguagem leve e multi-paradigma, consistindo as três tecnologias principais da World Wide Web. 6 | 7 | Permitindo tornar as aplicações interativas, o JavaScript é uma parte essencial da web, compondo a grande maioria dos sites disponíveis e também ganhando um espaço dedicado do motor dos principais navegadores acessíveis. 8 | 9 | **Nota:** 10 | Nem todos os motores fazem somente interpretação do código. 11 | Alguns também tem passos de compilação durante a execução, conhecido como JIT (Just In Time), mas não precisa se preocupar com isso por enquanto. 12 | 13 | ## História 14 | 15 | Tudo nasceu com a Netscape, com a criação do Netscape Navigator, *Imagem 1*, que em pouco tempo o navegador mais dominante dessa década, logo chegou à conclusão que a web teria que se tornar mais dinâmica, pois o Navigator tinha sempre que fazer uma requisição ao servidor para obter uma resposta do navegador. 16 | 17 |
18 |
19 | 20 | ![Netscape Navigator](../assets/navigator.png) 21 | 22 | *Imagem 1 - Tela do Netscap Navigator.* 23 |
24 |
25 | 26 | Em 1995 a Netscape contratou Brendan Eich para criar uma linguagem que proporcionasse esse dinamismo no navegador. A proposta inicial era a implementação da linguagem Scheme, baseada em LISP, puramente funcional, no Navigator. Porém a Netscape tinha projetos anteriores em conjunto com a Sun Microsystems para colocar sua mais recente e promissora linguagem de programação, o Java, no Navigator. Isso elevou uma discussão interna do motivo de ter duas linguagens. 27 | 28 | Obviamente predominou a escolha de uma única linguagem com a sintaxe baseada em Java. O argumento foi que o Scheme, por ter uma sintaxe e complexidade características de linguagens funcionais, se tornaria impopular (conforme o código abaixo). O objetivo da Netscape com a nova linguagem era exatamente o oposto. 29 | 30 | ```scheme 31 | (import 32 | (rnrs) 33 | (ironscheme clr)) 34 | 35 | ;Define a function write-ln 36 | (define (write-ln fmt . args) 37 | (clr-static-call System.Console WriteLine (clr-cast System.String fmt) 38 | (clr-cast System.Object[] 39 | (list->vector args)))) 40 | 41 | ; And invoke it! 42 | (write-ln "{0}" "Hello World!") 43 | ``` 44 | 45 |
46 | 47 | *Código de exemplo da linguagem Scheme.* 48 | 49 |
50 |
51 | 52 | Mesmo com sintaxe “javanesa” e com outras características do Java (valores primitivos e objetos), o JavaScript logo de início sofreu a influência funcional do Scheme, e mais tarde de linguagens como o Self (protótipos), Perl e Python (Strings, arrays e expressões regulares). 53 | 54 | Para defender o JavaScript contra outras propostas, um protótipo foi criado por Eich em dez dias, em Maio de 1995. Marc Andreesen nomeou o protótipo de Mocha. O nome da linguagem mudou de novo para LiveScript por causa de patentes e porque vários produtos estavam levando o “Live” como sufixo. No começo de Dezembro de 1995, o Java estava no seu ápice e a linguagem foi renomeada para JavaScript. 55 | 56 | ### O ECMAScript 57 | 58 | Depois que o JavaScript foi criado, a Microsoft criou, em Agosto de 1996, uma linguagem idêntica para ser usada no Internet Explorer 3. Para conter a ambição da Microsoft, a Netscape decidiu normatizar a linguagem através da organização ECMA International, companhia que era especializada em padrões e normativas. 59 | 60 | Os trabalhos em cima da normativa ECMA-262 começaram em Novembro de 1996. O nome JavaScript já era patenteado pela Sun Microsystems (hoje Oracle) e não poderia ser usado. Portanto, o nome composto por ECMA e JavaScript foi usado, resultando em ECMAScript. 61 | 62 | O ECMAScript esteve relativamente estagnado até 2015 com o aparecimento do *ECMAScript 6* - antes disso, o ECMAScript 3 foi publicado em 1999, o ECMAScript 4 foi abandonado, o ECMAScript 5 foi publicado em 2009 e o ECMAScript 5.1 foi publicado em 2011. 63 | 64 | O lançamento do ECMAScript 6 em 2015 marcou mudanças significativas para abordar os recursos exigidos pelo crescimento explosivo do JavaScript. E a velocidade das alterações de recursos foi tão grande que o ECMAScript 7 se tornou realidade em 2016 e o ​​ES8 em 2017. E hoje em dia temos o ECMAScript 11. 65 | 66 | #### Por que isso é importante? 67 | 68 | Porque você enfrentará constantemente situações em que o JavaScript comum é compatível com ES5 / ES5.1, ES6, ES7 ou ES8. 69 | 70 | Será JavaScript da mesma forma, mas não será executado em todos os motores JavaScript, porque estes estão em constante fluxo para suportar diferentes versões do ES. 71 | 72 | ### Motores JavaScript 73 | 74 | *Para ficar claro, um "motor JavaScript" é basicamente um programa que lê código JavaScript e roda ele.* 75 | 76 | A seguir, é apresentada uma lista dos principais motores JavaScript e seu suporte a ES: 77 | 78 | ##### SpiderMonkey 79 | 80 | Usado pelo navegador Firefox e Adobe Acrobat. Suporta ES5.1, recursos do ES6, ES7 e ES8. 81 | 82 | ##### V8 83 | 84 | Usado pelo navegador Google Chrome, Opera e Node.js. Suporta ES6 e recursos do ES7 e ES8. 85 | 86 | ##### WebKit 87 | 88 | Usado pelo navegador Apple Safari. Suporta ES6 e recursos do ES7 e ES8. 89 | 90 | ##### Chakra 91 | 92 | Usado pelo navegador Microsoft Edge. Suporta ES5.1 e recursos do ES6, além de alguns recursos do ES7. 93 | 94 | [Proximo Capitulo](../3_Ambiente/1_Editores-e-plugins.md) -------------------------------------------------------------------------------- /3_Ambiente/1_Editores-e-plugins.md: -------------------------------------------------------------------------------- 1 | ## 3.1 Editor de Texto 2 | 3 | Como a abordagem do curso será a parte básica do JavaScript, não será necessário o uso de uma IDE robusta. 4 | Portanto, utilizaremos o Visual Studio Code para escrevermos nossos códigos. 5 | 6 | Caso tenham preferência por algum outro editor ou mesmo uma IDE, fiquem a vontade para utilizá-la a fim de realizar os códigos que serão apresentados ao longo do curso. 7 | 8 | [Proximo Capitulo](../4_Basico/1_Saida.md) 9 | -------------------------------------------------------------------------------- /4_Basico/10_Exceptions.md: -------------------------------------------------------------------------------- 1 | # 4.10 - Exceptions 2 | 3 | Descrição: Uma exceção representa uma situação que normalmente não ocorre e representa algo de estranho ou inesperado no sistema. 4 | 5 | `try` - permite definir um bloco de código a ser testado quanto a erros enquanto ele está sendo executado. 6 | 7 | `catch` - instrução permite definir um bloco de código a ser executado, se ocorrer um erro no bloco `try`. 8 | 9 | A `throw` permite criar erros personalizados. 10 | 11 | A `finally` permite executar o código, após tentar e capturar, independentemente do resultado. 12 | 13 | ```javascript 14 | try { 15 | // Bloco do código 16 | } catch (err) { 17 | // Código para lidar com os erros 18 | } 19 | ``` 20 | 21 | Exemplo: 22 | ```javascript 23 | function UserException(message) { 24 | this.message = message; 25 | this.name = "UserException"; 26 | } 27 | 28 | function getMonthName(mes) { 29 | mes = mes - 1; // Ajusta o número do mês para index de array (1=Jan, 12=Dec) 30 | var meses = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; 31 | 32 | if (meses[mes] !== undefined) { 33 | return meses[mes]; 34 | } else { 35 | throw new UserException("MesInvalido"); 36 | } 37 | } 38 | 39 | try { 40 | // statements to try 41 | var meuMes = 15; // 15 não é um valor válido. 42 | nomeMes = getMonthName(meuMes); 43 | } catch (e) { 44 | nomeMes = "não informado"; 45 | console.log(e.message, e.name); // mostra no console a mensagem e o erro que foram pegos. 46 | } 47 | ``` 48 | [Proximo Capitulo](./11_Operadores_de_Atribuicao.md) -------------------------------------------------------------------------------- /4_Basico/11_Operadores_de_Atribuicao.md: -------------------------------------------------------------------------------- 1 | # 4.11 - Operadores de Atribuição 2 | 3 | Descrição: Operadores de atribuição são capazes de atribuir valores ao operando da esquerda baseado no operando da direita. 4 | 5 | Além o operador de atribuição básico(`=`), é possível utilizar os operadores aritméticos(`+`, `-`, `*`, `/`, `**` e `%`) em conjunto com o operador de atribuição. Permitindo realizar operações aritméticas entre os operandos e, em seguida, armazenar o valor. 6 | 7 | Tabela dos operadores e seus significados: 8 | | Operador | Significado | 9 | | -------- | ----------- | 10 | | x = y | x = y | 11 | | x += y | x = x + y | 12 | | x -= y | x = x - y | 13 | | x *= y | x = x * y | 14 | | x /= y | x = x / y | 15 | | x **= y | x = x ** y | 16 | | x %= y | x = x % y | 17 | 18 | Exemplos de uso: 19 | ```javascript 20 | let foo = 2; 21 | const bar = 3; 22 | 23 | foo += bar; // foo = foo + bar = 2 + 3 24 | console.log(foo); // 5 25 | 26 | foo *= bar; // foo = foo * bar = 5 * 3 27 | console.log(foo); // 15 28 | ``` 29 | 30 | > *Atenção, diferente de outras linguagens de programação, o JavaScript não permite alterar a ordem do operador para realizar as operações. Pode gerar erros ou resultados indesejados.* 31 | 32 | Exemplo: 33 | 34 | ```javascript 35 | let foo = 2; 36 | 37 | foo =+ '9'; // foo = +'9' = 9 38 | console.log(foo); // 9 39 | 40 | foo =- '9'; // foo = -'9' = -9 41 | console.log(foo); // -9 42 | 43 | foo =* 5; // Erro de sintaxe 44 | console.log(foo); // Não é executado pois ocorreu um erro na linha anterior 45 | ``` 46 | 47 | [Proximo Capitulo](./12_PrincipaisMetodosArray.md) -------------------------------------------------------------------------------- /4_Basico/12_PrincipaisMetodosArray.md: -------------------------------------------------------------------------------- 1 | # 4.11 - Principais métodos de Array 2 | 3 | ## Map 4 | 5 | O método map é utilizado geralmente quando você deseja percorrer um array e fazer uma alteração em cada elemento. E como consequência o método map gerar um array novo. 6 | ### Argumentos 7 | 8 | 1. Valor atual: É o item atual do array com que a função está trabalhando 9 | 10 | 2. Índice ou index: Esse valor é o índice do item dentro do array no qual você está trabalhando. 11 | 12 | 3. Array original: Você pode pegar todo o array e trabalhar com ele dentro do map também. 13 | 14 | Os 3 argumentos são recebidos na função de callback que você irá passar para dentro do map. 15 | 16 | ```javascript 17 | 18 | const numeros = [1,2,3,4,5] 19 | const adicionarUm = numeros.map((number, index, array) => { 20 | 21 | console.log(`Índice ${index} - Number: ${number}`); 22 | console.log('Array de origem:'); 23 | console.table(array); // Vai mostrar o índice e cada valor do array no índice em questão 24 | return number + 1; 25 | }) 26 | console.log(adicionarUm) 27 | /** Saida 28 | * Índice 0 - Number: 1 29 | Array de origem: 30 | Índice 1 - Number: 2 31 | Array de origem: 32 | Índice 2 - Number: 3 33 | Array de origem: 34 | Índice 3 - Number: 4 35 | Array de origem: 36 | Índice 4 - Number: 5 37 | Array de origem: 38 | [ 2, 3, 4, 5, 6 ] 39 | */ 40 | ``` 41 | ## Filter 42 | 43 | O método filter é usado para filtrar os itens de um array e apenas devolver aqueles que satisfazem a condição passada na função. 44 | 45 | ### Argumentos 46 | 47 | 1. Valor atual: É o item atual do array com que a função está trabalhando 48 | 49 | 2. Índice ou index: Esse valor é o índice do item dentro do array no qual você está trabalhando. 50 | 51 | 3. Array original: Você pode pegar todo o array e trabalhar com ele dentro do filter também. 52 | 53 | Os 3 argumentos são recebidos na função de callback que você irá passar para dentro do map. 54 | 55 | > O segundo e terceiro parâmetro (Índice e Array original) se repetem logo não irei adicionar novos exemplos deles. 56 | 57 | ```javascript 58 | const numeros = [1,2,3,4,5] 59 | const apenasNumerosImpares = numeros.filter((numero, indice, array) => { 60 | return numero % 2 !== 0; 61 | }); 62 | console.log(apenasNumerosImpares) 63 | /** 64 | * Saida 65 | * [ 1, 3, 5 ] 66 | */ 67 | ``` 68 | 69 | ## Reduce 70 | 71 | Como o nome sugere o método reduce é usado para reduzir o array para um único valor. 72 | 73 | ### Argumentos 74 | 75 | 1. Acumulador: Essa parâmetro é responsável por guardar todo o valor acumulado durante a execução do reduce. O mesmo será retorno no fim da execução. 76 | 77 | 2. Valor atual: É o valor atual do array. 78 | 79 | 4. Índice ou index: Esse valor é o índice do item dentro do array no qual você está trabalhando. 80 | 81 | 5. Array original: Você pode pegar todo o array e trabalhar com ele dentro do filter também. 82 | 83 | ```javascript 84 | const numeros = [1,2,3,4,5] 85 | const somaDeTodosOsValoresDoArray = numeros.reduce((acumulador, valorAtual) => { 86 | return acumulador + valorAtual 87 | }); 88 | console.log(somaDeTodosOsValoresDoArray); 89 | /** 90 | * Saida 91 | * > 15 92 | */ 93 | 94 | const nome = ['D','a','n','i','e','l']; 95 | const nomeConcatenado = nome.reduce((acumulador, letra) => { 96 | return acumulador + letra; 97 | }); 98 | console.log(nomeConcatenado); 99 | /** 100 | * Saida 101 | * > Daniel 102 | */ 103 | ``` 104 | ## Join 105 | 106 | O método join junta todos os elementos de um array em uma única string. 107 | 108 | ### Argumentos 109 | 110 | 1. Separador: Especifica a string que vai separar os elementos 111 | 112 | > Caso o separador seja omitido, os elementos vão ser separados por virgula 113 | 114 | ```javascript 115 | const palavras = ["Aprendendo", "como", "o", "Javascript", "funciona"] 116 | const frase = palavras.join(" ") 117 | console.log(frase) 118 | 119 | /** 120 | * Saida 121 | * > Aprendendo como o Javascript funciona 122 | */ 123 | 124 | // Note que o separador é um espaço em branco " ", é diferente de "" 125 | // Se o separador fosse "", as palavras não iriam ser separadas por espaço 126 | ``` 127 | 128 | ## Push 129 | 130 | O método push adiciona N elementos no final do array e retorna o valor do novo tamanho do array 131 | 132 | ### Argumentos 133 | 134 | 1. Elementos a serem adicionados 135 | 136 | ```javascript 137 | const numeros = [1,2,3,4,5] 138 | const novoTamanho = numeros.push(6,7,8,9) 139 | console.log(numeros) // Saida: [1, 2, 3, 4, 5, 6, 7, 8, 9] 140 | console.log(novoTamanho) // Saida: 9 141 | ``` 142 | 143 | ## Pop 144 | 145 | O método pop remove o último elemento do array, e retorna o valor do elemento removido 146 | > Pop não recebe parãmetros 147 | 148 | ```javascript 149 | const numeros = [1, 2, 3, 4, 5] 150 | const elementoRemovido = numeros.pop(); 151 | console.log(numeros) // Saida: [1, 2, 3, 4] 152 | console.log(elementoRemovido) // Saida: 5 153 | ``` 154 | 155 | ## Unshift 156 | O método unshift adiciona N elementos no inicio do array e, assim como o push, retorna o valor do novo tamanho do array 157 | 158 | ### Argumentos 159 | 160 | 1. Elementos a serem adicionados 161 | 162 | ``` javascript 163 | const numeros = [5, 6, 7, 8] 164 | const novoTamanho = numeros.unshift(1, 2, 3, 4) 165 | console.log(numeros) // Saida: [1, 2, 3, 4, 5, 6, 7, 8] 166 | console.log(novoTamanho) // Saida: 8 167 | ``` 168 | 169 | ## Shift 170 | 171 | O método shift remove o primeiro elemento do array, e assim como o método pop, retorna o valor do elemento removido 172 | > Shift não recebe parãmetros 173 | 174 | ```javascript 175 | const numeros = [1, 2, 3, 4, 5] 176 | const elementoRemovido = numeros.shift() 177 | console.log(numeros) // Saida: [2, 3, 4, 5] 178 | console.log(elementoRemovido) // Saida: 1 179 | ``` 180 | 181 | ## Concat 182 | 183 | O método concat concatena os dados de um ou mais arrays 184 | 185 | ### Argumentos 186 | 187 | 1. Array a se concatenar 188 | 189 | ```javascript 190 | const comidas = ["Cereal","Sanduíche","Mingau"] 191 | const bebidas = ["Café","Suco de Laranja"] 192 | const cafeDaManha = comidas.concat(bebidas) 193 | console.log(cafeDaManha) // Saida: ["Cereal","Sanduíche","Mingau","Café","Suco de Laranja"] 194 | ``` 195 | 196 | ## Length 197 | 198 | O método length retorna o tamanho de um array 199 | > length não recebe parâmetros 200 | 201 | ```javascript 202 | const linguagens = ["Javascript","C#","PHP","Golang"] 203 | const tamanho = linguagens.length 204 | console.log(tamanho) // Saida: 4 205 | ``` 206 | 207 | ## Every 208 | 209 | O método every passa por todos elementos do array, verificando se todos os elementos do array obedecem ao critério retornando `true` ou `falso` 210 | 211 | ### Argumentos 212 | 213 | 1. Elementos a serem verificados 214 | 215 | ```javascript 216 | const numbers = [2,4,6,8,10,12] 217 | numbers.every(number => number%2 == 0) //true pois verificou que todos os numeros são pares 218 | ``` 219 | 220 | ## Some 221 | 222 | O método some passa por todos elementos do array, verificando se pelo menos 1 dos elementos obedece as condições e retorna `true` 223 | 224 | ### Argumentos 225 | 226 | 1. Elementos a serem verificados 227 | 228 | ```javascript 229 | const users = ["Luiz","Carla","Daniel","Vanessa"] 230 | if (users.some(user => user === "Daniel")) { //true pois o usuário Daniel já existe dentro do array 231 | console.log("User already exists!"); 232 | } 233 | ``` 234 | 235 | [Proximo Capitulo](./13_Entendendo_o_this.md) -------------------------------------------------------------------------------- /4_Basico/13_Entendendo_o_this.md: -------------------------------------------------------------------------------- 1 | # 4.13 Entendendo o this no Javascript. 2 | 3 | ## A palavra "this". 4 | 5 | A palavra this, dentro da linguagem Javascript tem um papel importantíssimo ao referir-se ao escopo no qual aquela linha de código está sendo construida. 6 | 7 | ### O que é o escopo ? 8 | 9 | Para entendermos escopo, podemos fazer a seguinte analogia: 10 | 11 | Dentro de um país, temos diversos estados, e dentro dos estados temos municípios e dentro desse último os bairros. No código, por sua vez, temos o escopo do node, que seria equivalente ao país, o escopo do módulo, que seria os estados, e por fim as classes que podem ter funções dentro delas com seus escopos próprios. 12 | 13 | Ou seja, há diferentes "reinos" dentro de um mesmo arquivo .JS, de forma que uma variável dentro de uma função não é acessível para quem está fora dela, ou então o valor de uma variável que está fora, pode ser alterada dentro de uma classe, porém seu valor fora dela continua não mudando. 14 | 15 | Para poder transitar entre os diferentes escopos usamos a palavra reservada "this". 16 | 17 | ### O this na prática. 18 | 19 | ```javascript 20 | // No primeiro exemplo, teremos a let C dentro do escopo da função. 21 | 22 | function Exemplo() { 23 | let c = 10; 24 | return console.log(c); 25 | } 26 | Exemplo(); 27 | console.log(c); 28 | 29 | // Espera-se recebermos um erro de que "C" não está definida. 30 | 31 | /*Agora faremos um exemplo elevando o escopo da variável c, 32 | permitindo que ela seja acessada fora do escopo da função */ 33 | 34 | function Exemplo() { 35 | this.c = 10; 36 | return console.log(c); 37 | } 38 | Exemplo(); 39 | console.log(c); 40 | 41 | // Espera-se receber 10 em ambas as chamadas. 42 | ``` 43 | 44 | ### O escopo global: node. 45 | 46 | Como dito anteriormente, a palavra this permite que possamos acessar escopos mais elevados do que estamos, sendo o mais alto deles o escopo do próprio node, ganhando acesso a propriedades como o prototype dos objetos, podemos, então, definir uma nova constante dentro da própria classe Object usando o this. 47 | 48 | ```javascript 49 | 50 | this.Object.prototype = { 51 | A: "Nova variável"; 52 | } 53 | ``` 54 | 55 | ### Cuidados que devemos ter com o this. 56 | 57 | O this é uma palavra poderosa dentro do Javascript, porém perigosa. O uso dele deve ser restrito a cenários onde é necessário acessar uma variável que está acima e deve se evitar ao máximo chegar no escopo do módulo. Isso porque o uso excessivo do this pode causar uma confunção no código sobre responsabilidades e localização conforme a aplicação for escalonando. 58 | 59 | É preferível que crie-se classes ou componentes e os importe ( via sistema de módulos) do que usar descontroladamente o this. 60 | 61 | [Proximo Capitulo](./14_Objetos.md) -------------------------------------------------------------------------------- /4_Basico/14_Objetos.md: -------------------------------------------------------------------------------- 1 | # 4.14 Objetos 2 | 3 | ## o que é um objeto? 4 | 5 | É bem simples. Podemos imaginar um objeto como sendo uma gaveta, onde nessa gaveta existem pastas. Cada dado é armazenado em seu arquivo pela chave. Confira na figura a seguir: 6 | 7 | ![gavetaObjeto](../assets/gavetaObj.png) 8 | 9 | A sintaxe de um objeto também é bem simples. Exemplo: 10 | ```javascript 11 | let he4rt = { 12 | comunidade: "Ativa", 13 | devs: "Incríveis" 14 | }; 15 | ``` 16 | Nesse exemplo, temos o objeto "he4rt", onde as chaves desse objeto são "comunidade" e "devs". Essas chaves também podem conter outros objetos, funções etc. 17 | 18 | Também é possível criar um objeto vazio através do "object constructor". Exemplo: 19 | ```javascript 20 | let user = new Object(); 21 | let user = {} 22 | ``` 23 | 24 | Para adicionar porteriormente uma key num objeto já criado, basta usar o ponto (.). Exemplo: 25 | ```javascript 26 | let he4rt = { 27 | comunidade: "Ativa", 28 | devs: "Incríveis" 29 | }; 30 | console.log(he4rt) // {comunidade: "Ativa", devs: "Incríveis"} 31 | // ADICIONANDO UMA NOVA KEY 32 | he4rt.key = "adicionada" 33 | console.log(he4rt) // {comunidade: "Ativa", devs: "Incríveis", key: "adicionada"} 34 | ``` 35 | 36 | Outra forma de adicionar objetos, é usando []. Exemplo: 37 | ```javascript 38 | let he4rt = { 39 | comunidade: "Ativa", 40 | devs: "Incríveis" 41 | }; 42 | 43 | he4rt["nome"] = "Vitor" 44 | 45 | console.log(he4rt) // {comunidade: "Ativa", devs: "Incríveis", nome: "Vitor"} 46 | ``` 47 | 48 | Agora que conseguimos declara-los em hard code, um vazio, e adicionar uma chave em um objeto já declarado, como remover? Exemplo: 49 | ```javascript 50 | let he4rt = { 51 | comunidade: "Ativa", 52 | devs: "Incríveis" 53 | }; 54 | console.log(he4rt) // {comunidade: "Ativa", devs: "Incríveis"} 55 | 56 | delete he4rt.devs; 57 | console.log(he4rt) // {comunidade: "Ativa"} 58 | ``` 59 | 60 | ### Acessando objetos 61 | 62 | Agora que conseguimos manipular a criação e como deletar chaves num objeto, como podemos imprimir a frase "Hello World" usando duas keys dentro de um objeto? Simples. 63 | 64 | ```javascript 65 | let helloWorld = { 66 | hello: "Hello ", 67 | world: "World" 68 | } 69 | 70 | console.log(helloWorld.hello + helloWorld.world) // Hello World 71 | ``` 72 | Aqui, estou dizendo para. entrar em "helloWorld" e acessar "hello." Dessa forma, o "console.log" conseguiu imprimir a string da chave. 73 | 74 | [Proximo Capitulo](../5_DOM-DocumentObjectModel/1_Introducao.md) -------------------------------------------------------------------------------- /4_Basico/15_Promise.md: -------------------------------------------------------------------------------- 1 | # Promise 2 | 3 | As Promises ou Promessa traduzido para o português, é nada mais que um objeto javascript que sempre retorna um resultado seja de sucesso ou erro. 4 | 5 | ### Funcionamento da promise 6 | 7 | A promise sempre irá retornar um resultado independente se for de sucesso ou erro, e ainda assim é possível definir o que irá retornar em caso de sucesso ou em caso de erro. Vamos ver na prática para entendermos melhor. 8 | 9 | Eu tenho uma função que a partir de dois parâmetros soma e retorna o calculo. 10 | 11 | ``` 12 | function calcular(soma1, soma2) { 13 | return soma1 + soma2; 14 | } 15 | ``` 16 | 17 | A partir do resultado da função de `calcular()` eu quero decidir se será retornado o resultado da função ou então caso ocorra um erro o que seria retornado. Sendo assim, criaremos uma variável que receberá o resultado dessa promise. 18 | 19 | ``` 20 | const promise = new Promise(function (resolve, reject) { 21 | const soma1 = 2; 22 | const soma2 = 5; 23 | 24 | const result = calcular(soma1, soma2); 25 | 26 | if (result != null) { 27 | resolve(result); 28 | } else { 29 | reject(false); 30 | } 31 | }); 32 | ``` 33 | 34 | Dentro da promise será criado uma função de callback onde deverá ter dois parâmetros, sendo eles o `resolve` eo `reject`. O resolve irá retornar tudo o que for referente a uma operação bem sucedida, já o reject se refere a uma operação que houve falha. Neste exemplo podemos ver que eu crio duas variáveis (`soma1` e `soma2`), atribuo um valor a elas e então é criado outra variável para receber o resultado da função `calcular()`. 35 | A partir do resultado obtido na variável `result` será feita uma validação para definir se houve um valor de fato ou não, caso haja o `resolve` será acionado retornando assim o valor que estiver na variável `result`, caso não haja valor nenhum o reject será acionado retornando false. 36 | 37 | > Lembrando os valores no `resolve` e no `reject` eu defini desta maneira, você por sua vez poderá retornar o que fizer mais sentido no seu caso. 38 | 39 | Depois de ter criado a promise e definido os retornos que a mesma dará ainda não acaba por ai, pois o resultado da variável `promise` que haviamos definido para receber o resultado da promise também terá um retorno em um objeto promise. Se colocarmos a variável em um console.log será possível perceber que é retornado esse objeto promise. 40 | 41 | ``` 42 | console.log(promise) 43 | ``` 44 | 45 | Valor na variável `promise` 46 | 47 | ![retorno da promise](../assets/retorno_da_promise.png) 48 | 49 | Então, o que poderá ser feito para obter o resultado destá promise? Precisamos utilizar os métodos `then()` e `catch()`! 50 | 51 | > Caso você nunca tenha visto sobre [then()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then) e [catch()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/catch) é possível verificar na MDN Web Docs. 52 | 53 | Para que possamos obter o resultado da promise é bem simples! 54 | 55 | ````` 56 | // Variável promise 57 | promise 58 | .then(function (result) { 59 | console.log(`O resultado foi: ${result}`); // Resultado da função ````calcular()``` 60 | }) 61 | .catch(function (error) { 62 | console.error("Houve um erro na função: ", error); // Resultado obtido na promise, no nosso caso será "Houve um erro na função: { error }" 63 | }); 64 | ````` 65 | 66 | Ambos os métodos `then()` e `catch()` necessitam de uma função de callback, sendo assim criamos uma função de callback em cada método passando um parâmetro que no caso do `then()` retornada o resultado e no caso do `catch()` retornará o erro. 67 | 68 | Agora vamos ver como ficaria o código completo. 69 | 70 | ### Código completo 71 | 72 | ``` 73 | function calcular(soma1, soma2) { 74 | return soma1 + soma2; 75 | } 76 | 77 | const promise = new Promise(function (resolve, reject) { 78 | const soma1 = 2; 79 | const soma2 = 5; 80 | 81 | const result = calcular(soma1, soma2); 82 | 83 | if (result != null) { 84 | resolve(result); 85 | } else { 86 | reject(false); 87 | } 88 | }); 89 | 90 | promise 91 | .then(function (result) { 92 | console.log(`O resultado foi: ${result}`); 93 | }) 94 | .catch(function (error) { 95 | console.error("Houve um erro na função: ", error); 96 | }); 97 | ``` 98 | 99 | ### Resultados 100 | 101 | Esperamos que se ocorrendo tudo da forma esperada seja retornado a soma das variáveis `soma1` e `soma2`, sendo no total 7. Então deverá ser retornado da seguinte forma: "O resultado foi: 7". 102 | 103 | ![resultado then da promise](../assets/promise_then_result.png) 104 | 105 | Mas e se eventualmente ocorrer um erro o que deverá ser retornado? Para isso irei provocar um erro para mostrar o resultado. 106 | Neste caso irei na função `calcular()` e alterar para retornar somente `null`. 107 | 108 | ``` 109 | function calcular(soma1, soma2) { 110 | return null; 111 | } 112 | ``` 113 | 114 | Então o retorno para este caso será: 115 | 116 | ![retorno do catch](../assets/promise_catch_result.png) 117 | -------------------------------------------------------------------------------- /4_Basico/1_Saida.md: -------------------------------------------------------------------------------- 1 | # 4.1 - Funções de Saída 2 | 3 | Após o nosso ambiente montado com todas as ferramentas necessárias, vamos agora ver um código na prática. 4 | 5 | Como iremos usar o nosso console em uma boa parte do curso, precisaremos de algumas funções para nos auxiliar a visualizar qualquer saída de dados do nosso código. Nessa lição, iremos conhecer essas funções. 6 | 7 | ## Função -> Console.log() 8 | 9 | Descrição: Exibe uma mensagem no console do navegador. 10 | 11 | Sempre que fizermos um trecho de código, precisamos entender se ele funcionou ou não. 12 | Na maior parte do tempo, iremos usar o `console.log()` para fazer essa verificação. 13 | Utilizando essa função, a mensagem, variável ou o que quisermos, será impresso no console. 14 | 15 | Veja este primeiro exemplo: 16 | 17 | ```js 18 | console.log("He4rtDevs <3"); 19 | 20 | console.log(123); 21 | 22 | console.log([1, 2, 3]); 23 | 24 | console.log({ curso: "js4noobs" }); 25 | ``` 26 | 27 | Saída rodando o código no NodeJS: 28 | 29 | ``` 30 | He4rtDevs <3 31 | 123 32 | [1, 2, 3] 33 | { curso: "js4noobs" } 34 | ``` 35 | 36 | A saida rodando o código no navegador: 37 | 38 |

39 | Tela do navegador chrome, utilizando o console 40 |

41 |
42 | Imagem 1 - Tela do navegador chrome, utilizando o console. 43 |
44 | 45 | ### Algumas observações: 46 | 47 | Como é possível notar, o `console.log()` automaticamente faz uma quebra de linha após fazer uma impressão. 48 | 49 | É interessante notar também que quando passamos um array (no caso o `[1,2,3]`), os valores são impressos dentro dos colchetes, reforçando que é um array. No caso de visualizar no console do browser ainda é possível clicar naquela setinha que está à esquerda no começo da linha para expandir as informações do array. 50 | 51 | Algo semelhante ocorre quando passamos um objeto (no caso o `{ curso: "js4noobs" }`), os campos são impressos dentro de chaves, reforçando que aquelas informações fazem parte de um objeto. Novamente, visualizar no console do browser também traz vantagens, pois é possível clicar naquela setinha que está à esquerda no começo da linha para expandir as informações do objeto. 52 | 53 | ## Outras funções do Console 54 | 55 | ### Assert 56 | 57 | Descrição: Escreve uma mensagem de erro para o `console` caso a expressão passada como primeiro argumento resulte em `false`. Case resulte em `true`, nada acontece. 58 | 59 | ```js 60 | const boolean = false; 61 | console.assert(boolean, "mensagem a ser exibida se o boolean for falso"); 62 | ``` 63 | Saída: 64 | 65 | ``` 66 | mensagem a ser exibida se o boolean for falso. 67 | ``` 68 | 69 | No caso acima, usamos uma simples variável contendo um valor booleano, mas poderia ser uma expressão mais complexa, por exemplo: 70 | 71 | ```js 72 | console.assert((5 + 4) > 8, "mensagem a ser exibida se o boolean for falso"); 73 | ``` 74 | 75 | Nesse caso, nada será impresso, afinal, 9 é maior que 8 e o primeiro argumento receberá o valor `true`. 76 | 77 | ### count 78 | 79 | Descrição: Exibe no console o número de vezes em que a chamada `count()` em particular foi invocada. 80 | 81 | ```js 82 | let label = ""; 83 | 84 | function consoleLabel() { 85 | console.count(label); 86 | return "label: " + label; 87 | } 88 | 89 | label = "he4rt"; 90 | consoleLabel(); 91 | label = "devs"; 92 | consoleLabel(); 93 | consoleLabel(); 94 | console.count(); 95 | ``` 96 | 97 | Saída: 98 | 99 | ``` 100 | he4rt: 1 101 | devs: 1 102 | devs: 2 103 | devs: 3 104 | ``` 105 | 106 | ### dir 107 | 108 | Descrição: Exibe uma lista interativa das propriedades do objeto JavaScript especificado. A saída é apresentada como uma lista hierárquica com triângulos que permitem ver o conteúdo de objetos-filho. 109 | 110 | ```javascript 111 | const comunidade = { 112 | nome: "he4rt", 113 | }; 114 | 115 | console.dir(comunidade); 116 | ``` 117 | 118 | Saída no NodeJS: 119 | 120 | ``` 121 | nome: 'he4rt'; 122 | ``` 123 | 124 | Saída no browser: 125 | 126 | ``` 127 | ▶ Object 128 | ``` 129 | 130 | Caso clique no triângulo: 131 | 132 | ``` 133 | ▼ Object 134 | nome: "he4rt" 135 | ▶ __proto__: Object 136 | 137 | ``` 138 | 139 | ### error & exception 140 | 141 | Descrição: 'Escreve' uma mensagem de erro no Web Console. 142 | 143 | ```js 144 | console.error("Erro aqui irmão!"); 145 | // Erro aqui irmão! 146 | 147 | Descrição: Um atalho para o `error`. 148 | 149 | console.exception("Erro aqui irmão! mas de outra forma"); 150 | // Erro aqui irmão! mas de outra forma 151 | ``` 152 | 153 | ### group 154 | 155 | Descrição: cria e separa as mensagens em grupos alinhados. 156 | 157 | ```js 158 | console.log("Canais do discord"); 159 | console.group(); 160 | console.log("global"); 161 | console.group(); 162 | console.log("bate-papo"); 163 | console.log("aprendizado-diário"); 164 | console.groupEnd(); 165 | console.groupEnd(); 166 | 167 | // Canais do discord 168 | // | global 169 | // | | bate-papo 170 | // | | aprendizado-diário 171 | ``` 172 | 173 | ## table 174 | 175 | Descrição: Exibe as informações em forma de tabela. 176 | 177 | ```js 178 | console.table(["he4rt", "devs", "discord"]); 179 | ``` 180 | 181 | Saída: 182 | 183 | | (index) | Values | 184 | | ------- | ------- | 185 | | 0 | he4rt | 186 | | 1 | devs | 187 | | 2 | discord | 188 | 189 | Para mais informações e usos, confira a [documentação do console.table()](https://developer.mozilla.org/pt-BR/docs/Web/API/Console/table). 190 | 191 | ## Time & TimeEnd 192 | 193 | Descrição: 194 | `time()` Inicia um cronômetro com precisão de milissegundos. 195 | 196 | `timeEnd()` termina e exibe a contagem do tempo. 197 | 198 | ```js 199 | console.time(); 200 | for(let i = 0; i < 10; ++i) { 201 | // alguma ação 202 | }; 203 | console.timeEnd(); 204 | ``` 205 | 206 | Saída: 207 | 208 | ``` 209 | default: 0.00830078125ms 210 | ``` 211 | 212 | Note que esse tempo cronometrado é só um exemplo, você provavelmente irá receber um valor diferente na sua máquina caso rode o código acima sem alterações. 213 | 214 | Note também que o valor cronometrado recebeu o nome de "default", isso pode não ser muito útil, então é interessante que a gente dê um nome quando usarmos essa função: 215 | 216 | ```js 217 | const label = 'for vazio'; 218 | 219 | console.time(label); 220 | for(let i = 0; i < 100; ++i) { 221 | }; 222 | console.timeEnd(label); 223 | ``` 224 | 225 | Saída: 226 | 227 | ``` 228 | for vazio: 0.030029296875ms 229 | ``` 230 | 231 | ### warning 232 | 233 | Descrição: Escreve uma mensagem de alerta no Console Web. 234 | 235 | Usado para mostrar mensagens de erro para o usuário pelo console. 236 | 237 | ```js 238 | console.warn("Texto de alerta!"); 239 | ``` 240 | 241 | Saída: 242 | 243 | ``` 244 | Texto de alerta! 245 | ``` 246 | 247 | Caso rode no browser, note que a linha onde é impresso o texto toma a cor amarela. 248 | 249 | [Proximo Capitulo](./2_Comentarios.md) -------------------------------------------------------------------------------- /4_Basico/2_Comentarios.md: -------------------------------------------------------------------------------- 1 | # 4.2 - Comentários 2 | 3 | Descrição: Um comentário é uma parte de código que não é interpretada pelo motor JavaScript. Pode ser utilizada, também, para colocar textos que ajudam a identificar o que está sendo feito naquele trecho de código. 4 | 5 | Claro que idealmente devemos tentar ao máximo deixar nosso código o mais legível possível, usando nomes de variáveis que sejam explícitos no que elas representam. Assim como funções cujos nomes sejam explícitos em relação ao que a função faz. 6 | Entretanto, em trabalhos em equipe, inevitavelmente lidaremos com pessoas de vários níveis diferentes, então é interessante além de ter o código legível, também ter comentários em trechos que possam ser obscuros para alguns. 7 | 8 | Existem dois tipos de comentários em JavaScript: 9 | 10 | ### Comentários de uma única linha de código. 11 | 12 | São iniciados com duas barras `//`. 13 | 14 | Veja o código abaixo: 15 | 16 | ```js 17 | // Este é um comentário q vai explicar tudo abaixo 18 | console.log("He4rtDevs <3"); 19 | // E também não será interpretado, quer ver? 20 | // console.log("Nada vai aparecer"); 21 | ``` 22 | 23 | ### Comentários de várias linhas de código. 24 | iniciados com `/*` e terminados com `*/`. 25 | 26 | ```javascript 27 | /* Exemplo de comentário 28 | com várias linhas. 29 | 30 | Basta escolher o início 31 | e o fim. */ 32 | ``` 33 | [Proximo Capitulo](./3_Tipos-de-dados.md) -------------------------------------------------------------------------------- /4_Basico/3_Tipos-de-dados.md: -------------------------------------------------------------------------------- 1 | # 4.3 - Tipo de dados primitivos 2 | 3 | ## Tipagem dinâmica 4 | 5 | - JavaScript é uma linguagem de tipagem dinâmica. 6 | 7 | - Isso significa que não necessita declarar o tipo de dado de uma variável antes de sua atribuição. O tipo será automaticamente determinado quando o programa for processado. 8 | 9 | - Você pode reatribuir a uma variável um tipo de dado diferente. 10 | 11 | ## Tipos de dados 12 | 13 | Descrição: Os tipos de dados em JavaScript são basicamente os tipos de valores que podemos manipular com a linguagem. 14 | 15 | Elas podem ser dos tipos: 16 | 17 | - Strings 18 | - Numbers 19 | - Booleans 20 | - Arrays 21 | - Objetos 22 | - null 23 | - undefined 24 | 25 | ### Strings 26 | 27 | Descrição: O tipo `String` em JavaScript é usado para representar textos, ou cadeias de caracteres. 28 | 29 | Para declarar strings podemos usar aspas simples ' ' ou aspas duplas " ". Tudo que estiver dentro das aspas vai ser considerado texto exemplo "1". 30 | 31 | Mais para a frente iremos ver que existe ainda uma terceira forma que usa crases: 32 | 33 | ```js 34 | const valor = 8; 35 | 36 | const texto = `Valor: ${8}`; 37 | ``` 38 | 39 | Isso é o que chamamos de `template string`, ou seja, um modelo de string. 40 | No código acima, o motor JavaScript iria processar a `template string` de forma que a string armazenada pela variável `texto` seria `"Valor: 8"`. 41 | 42 | ### Numbers 43 | 44 | Descrição: O tipo `Number` é usado para representar números, independente se for um número inteiro tipo `7` ou um número real como `32.4`. 45 | 46 | Para declarar números não tem muito segredo, simplesmente atribua o número. 47 | 48 | Note que o valor de exemplo acima usa ponto e não vírgula para separar os decimais, afinal a linguagem utiliza o padrão Inglês. 49 | 50 | ### Boolean 51 | 52 | Descrição: O tipo `Boolean` representa uma entidade lógica e pode ter dois valores: 53 | 54 | - verdadeiro(`true`) ou 55 | - falso(`false`). 56 | 57 | Normalmente os valores desse tipo, a gente consegue através da avaliação de uma condição, por exemplo: 58 | 59 | ``` 60 | 1 == 1 (mesma coisa que 1 é igual a 1) 61 | 62 | essa condição nos retorna um valor booleano, nesse caso, `true` 63 | ``` 64 | 65 | ### bigInt 66 | 67 | Descrição: É um tipo de dado numérico que representa inteiros no formato de precisão arbitrária. Em outras linguagens de programação existem tipos numéricos diferentes, como por exemplo: Integers, Floats, Doubles ou Bignums. 68 | 69 | ### Arrays 70 | 71 | Descrição: `Array` é uma variável ​​que contêm vários valores. Ele é comumente usados ​​para armazenar um grupo de valores relacionados. 72 | 73 | Os `Arrays` podem armazenar quaisquer outro tipo de dados. 74 | Podemos ter um array de arrays, array de objetos, array de números, strings, booleanos, etc... 75 | 76 | Podemos declarar um `Array` com colchetes [ ], todo e qualquer tipo de dados que estiver dentro dele vai ser armazenado, exemplos: 77 | 78 | ```js 79 | const numeros = [1, 2, 3, 4, 5, 6]; 80 | 81 | const palavras = ["He4rt", "Dev", "Melhor", "Comunidade"]; 82 | 83 | const misto = ["He4rt", 1, 27.5, 3]; 84 | 85 | const array_com_arrays = ["Heart", "Dev", [1, "Melhor Comunidade"]]; 86 | ``` 87 | 88 | ### Objetos 89 | 90 | Descrição: Os objetos são muito semelhantes aos `Arrays`, pois são variáveis ​​que podem conter vários valores. 91 | No entanto, os objetos têm uma propriedade-chave que ajuda a dar mais significado às informações armazenadas neles. 92 | 93 | Podemos declarar `Objetos literais` utilizando chaves `{ }`. 94 | Segue a mesma regra dos `Arrays` porem devemos informar uma chave para eles e para cada chave/valor devemos colocar uma virgula para informamos a proxima chave/valor, exemplo: 95 | 96 | ```js 97 | const professor = { 98 | nome: "He4rt", 99 | nota: 10, // avaliação do professor 100 | classes: [1, 2, 3, 4, 5] // ids das classes que leciona. 101 | }; 102 | ``` 103 | 104 | Note que os espaços são puramente para alinhar e facilitar a leitura, é possível deixar um espaço só caso prefira, ou mesmo utilizar outra formatação. 105 | 106 | ```js 107 | // mesma coisa: 108 | const professor = { 109 | nome: "He4rt", 110 | nota: 10, // avaliação do professor 111 | classes: [1, 2, 3, 4, 5] // ids das classes que leciona. 112 | }; 113 | ``` 114 | 115 | Não temos restrição para o valor que cada chave recebe, pode ser um valor `Boolean`, `Array`, `Number`, `String`, outro objeto, etc... 116 | 117 | ### Null e Undefined 118 | 119 | Descrição: O tipo `Null` tem exatamente um valor: `null`(nulo). 120 | 121 | O tipo `Undefined` é um valor um tanto único. 122 | Uma variável que não tenha recebido nenhum valor específico, assume o valor `undefined` (indefinido). 123 | Outra forma de se obter `undefined` seria tentar pegar o retorno de uma função que não retorna nada, ou mesmo tentar acessar um parâmetro de função que não tenha recebido um argumento, mas isso veremos mais para a frente. 124 | 125 | [Proximo Capitulo](./4_Variaveis.md) -------------------------------------------------------------------------------- /4_Basico/4_Variaveis.md: -------------------------------------------------------------------------------- 1 | # 4.4 - Variáveis 2 | 3 | > **Descrição**: 4 | As variáveis ​​podem ser consideradas como contêineres que permitem armazenar dados sobre elas. \ 5 | Isso nos ajudará a escrever o código, permitindo salvar e reutilizar quaisquer dados para atingir seu objetivo. 6 | 7 | Existem 3 maneiras de declarar variáveis: 8 | - var 9 | - let 10 | - const 11 | 12 | o problema que temos com a variável `var` é que ela tem um pequeno problema de ESCOPO. 13 | 14 | --- 15 | 16 | ## Mas o que é ESCOPO? 17 | 18 | > **Descrição**: \ 19 | A grande maioria das linguagens possui o conceito de ESCOPO, e JavaScript não é diferente. \ 20 | ESCOPO é a acessibilidade de objetos, variáveis e funções em diferentes partes do código. 21 | 22 | Em outras palavras, o que determina quais são os dados que podem ser acessados em uma determinada parte do código é o ESCOPO. 23 | 24 | ### Escopo Local e Escopo Global 25 | 26 | Escopo local basicamente é um bloco que tudo o que for declarado, executado dentro dele somente ira existir nele, exemplo: 27 | 28 | ```javascript 29 | function soma() { 30 | var numero = 0 31 | 32 | Tudo o que está dentro da chaves é o nosso escopo local 33 | 34 | } 35 | 36 | console.log( numero ) <- não consigo ter acesso a variável x pois foi declarada dentro do escopo local da função soma 37 | ``` 38 | 39 | Escopo global é tudo o que for declarado, criado fora do bloco, por conta disso toda a nossa aplicação tem acesso a eles, exemplo: 40 | 41 | ```javascript 42 | var numero = 1 43 | 44 | function soma(){ 45 | return numero + 1 <-- estamos a retornado a soma do numero acrescentando mais 1 46 | } 47 | 48 | console.log(numero) 49 | ``` 50 | 51 | No JS em especifico até o ES2016 (ECMAScript2016), tínhamos um grande problema ao declarar variáveis usando **`var`** dentro de blocos de instrução (IF, FOR, WHILE, etc...) pois esses blocos não criam o seu próprio escopo, o que fazia com que todas as variáveis declaradas com **`var`** dentro dele se tornassem globais. 52 | 53 | Por conta disso evitamos ao máximo o uso da **`var`**, pois a **`let`** nasceu dessa necessidade de podermos declarar variáveis com escopo local dentro de blocos de instrução, exemplo: 54 | 55 | ```javascript 56 | if(1 == 1) { 57 | var x = 'Ela foi criada e inicializada no escopo global da aplicação.' 58 | } 59 | 60 | console.log(x) /* 61 | conseguimos acessar a variável pois blocos de instrução não criam escopo. 62 | 63 | Se fizermos a mesma verificação e declarar a variável x usando let, conseguimos criar um escopo local para ela: 64 | 65 | */ 66 | 67 | if(1 == 1) { 68 | let x = 'Agora ela possui um escopo local.' 69 | } 70 | 71 | console.log(x) /* <- não conseguimos mais ter acesso a variável. */ 72 | ``` 73 | 74 | E para declaração de constantes, cujo valor é fixo que não serão possíveis atribuir um novo valor, são criada como **`const`**. 75 | 76 | Para usarmos variáveis, podemos fazer: 77 | 78 | ```javascript 79 | let x; 80 | const y; 81 | 82 | let foo = 1; 83 | let bar = 2 + 1; // bar = 3 84 | let biz = foo + bar; // biz = 4 85 | 86 | const texto = 'Os melhores cursos são na '; 87 | const plataforma = 'He4rt!'; 88 | const frase = texto + plataforma; // frase = Os melhores cursos são na He4rt! 89 | 90 | const cores = [ ' vermelho ' , ' azul ' , ' rosa ' , ' preto ' ]; 91 | 92 | let usuario = { 93 | nome : 'Fulano' , 94 | idade : 22 95 | }; 96 | ``` 97 | [Proximo Capitulo](./5_Operadores-Aritmeticos.md) -------------------------------------------------------------------------------- /4_Basico/5_Operadores-Aritmeticos.md: -------------------------------------------------------------------------------- 1 | # 4.5 - Operadores Aritméticos 2 | 3 | Descrição: Operadores aritméticos tomam valores numéricos como seus operandos e retornam um único valor numérico. 4 | 5 | Os operadores aritméticos padrões são: 6 | 7 | - **os de soma (`+`)**, 8 | - **subtração (`-`)**, 9 | - **multiplicação (`*`)**, 10 | - **divisão (`/`)**, 11 | 12 | Estes operadores trabalham da mesma forma como na maioria das linguagens de programação quando utilizados com números de ponto flutuante. 13 | 14 | - **Módulo(Resto da Divisão) (`%`)** Irá retornar o resto da divisão. 15 | - **Exponencial (`**`)** Retorna o resultado de uma variável elevada a outra. 16 | 17 | ## Incremento (`++`) 18 | 19 | Descrição: O operador de incremento acrescenta um no dado tratado. 20 | 21 | Se usado depois da variável, ele incrementa o valor depois retorna. 22 | 23 | ```javascript 24 | let numero = 1; 25 | console.log(numero); // 1 26 | console.log(numero++); // 1 27 | console.log(numero); // 2 28 | ``` 29 | 30 | Se usado antes da variável, ele retorna o valor depois incrementa. 31 | 32 | ```javascript 33 | let numero = 1; 34 | console.log(numero); // 1 35 | console.log(++numero); // 2 36 | console.log(numero); // 2 37 | ``` 38 | 39 | ## Decremento (`--`) 40 | 41 | Descrição: O operador de decremento subtrai um no dado tratado. 42 | 43 | Se usado depois da variável, ele subtrai o valor depois retorna. 44 | 45 | ```javascript 46 | let numero = 2; 47 | console.log(numero); // 2 48 | console.log(numero--); // 1 49 | console.log(numero); // 1 50 | ``` 51 | 52 | Se usado antes da variável, ele retorna o valor depois subtrai. 53 | 54 | ```javascript 55 | let numero = 2; 56 | console.log(numero); // 2 57 | console.log(--numero); // 2 58 | console.log(numero); // 1 59 | ``` 60 | 61 | ## Negação (`-`) 62 | 63 | Descrição: O operador de negação unária precede seu operando e o nega. 64 | 65 | ```javascript 66 | let numero = 1; 67 | console.log(numero); // 1 68 | console.log(-numero); // -1 69 | ``` 70 | 71 | ## Soma Unária (`+`) 72 | 73 | Descrição: o `+` antes de uma variável, é a forma mais rápida e a forma preferida de converter alguma coisa em um número, porque ele não realiza nenhuma outra operação no número. 74 | 75 | ```javascript 76 | console.log(+3); // 3 77 | console.log(+"3"); // 3 78 | console.log(+true); // 1 79 | console.log(+false); // 0 80 | console.log(+null); // 0 81 | ``` 82 | 83 | [Proximo Capitulo](./6_Operadores-Logicos.md) -------------------------------------------------------------------------------- /4_Basico/6_Operadores-Logicos.md: -------------------------------------------------------------------------------- 1 | # 4.6 - Operadores 2 | 3 | ## Lógicos 4 | 5 | Descrição: Operadores lógicos são tipicamente usados com valores Booleanos (lógicos - `TRUE/FALSE`). 6 | 7 | - **`var1 && var2` - AND** = Retorna `var1` caso possa ser convertido para `FALSE`; senão, retorna `var2`. Assim, quando utilizado com valores booleanos, && retorna `TRUE` caso ambos operandos sejam verdadeiros; caso contrário, retorna `FALSE`. 8 | 9 | - **`var1 || var2` - OR** = Retorna `var1` caso possa ser convertido para `TRUE`; senão, retorna `var2`. Assim, quando utilizado com valores booleanos, || retorna `TRUE` caso ambos os operandos sejam verdadeiro; se ambos forem falsos, retorna `FALSE`. 10 | 11 | - **`!var1` - NOT** = Retorna `FALSE` caso o único operando possa ser convertido para `TRUE`; senão, retorna `TRUE`. 12 | 13 | ## Comparação 14 | 15 | Descrição: Operadores de comparação retornam um valor lógico se a comparação é verdadeira. 16 | 17 | As únicas exceções a esta regra são os operadores `===` e o `!==`, que realizam comparações de igualdade e desigualdade "estritas". 18 | 19 | - **Igual (==)** = Retorna `TRUE` caso os operandos sejam iguais. 20 | 21 | - **Não igual (!=)** = Retorna `TRUE` caso os operandos não sejam iguais. 22 | 23 | - **Estritamente igual (===)** = Retorna `TRUE` caso os operandos sejam iguais **e do mesmo tipo**. 24 | 25 | - **Estritamente não igual (!==)** = Retorna `TRUE` caso os operandos não sejam iguais **e/ou não sejam do mesmo tipo**. 26 | 27 | - **Maior que (>)** = Retorna `TRUE` caso o operando da esquerda seja maior que o da direita. 28 | 29 | - **Maior que ou igual (>=)** = Retorna `TRUE` caso o operando da esquerda seja maior ou igual ao da direita. 30 | 31 | - **Menor que (<)** = Retorna `TRUE` caso o operando da esquerda seja menor que o da direita. 32 | 33 | - **Menor que ou igual (<=)** = Retorna `TRUE` caso o operando da esquerda seja menor ou igual ao da direita. 34 | 35 | [Proximo Capitulo](./7_Condicionais.md) -------------------------------------------------------------------------------- /4_Basico/7_Condicionais.md: -------------------------------------------------------------------------------- 1 | # 4.7 - Condicionais 2 | 3 | ## Lógicos 4 | 5 | ### IF ... ELSE 6 | 7 | Descrição: De longe o tipo mais comum de declaração condicional que você usará em JavaScript — as modestas declarações `if ... else.` 8 | 9 | ```javascript 10 | if (condicao) { 11 | // código para executar caso a condição seja verdadeira 12 | } else { 13 | // senão, executar este código 14 | } 15 | ``` 16 | 17 | ### ELSE IF 18 | 19 | Descrição: Existe uma maneira de encadear escolhas/resultados extras ao seu `if...else` — usando `else if`. 20 | Cada escolha extra requer um bloco adicional para colocar entre `if() { ... }` e `else { ... }` 21 | 22 | ```javascript 23 | if (condicao) { 24 | // código para executar caso a condição seja verdadeira 25 | } else if (outraCondicao) { 26 | // senão, executar este código caso outra condição seja verdadeira 27 | } 28 | ``` 29 | 30 | ### Operador ternário 31 | 32 | Descrição: Os operadores ternários testam uma condição e retorna um valor/expressão se for `TRUE`, e outro caso seja `FALSE` — isso pode ser útil em algumas situações e pode ocupar muito menos código que um bloco `if...else` se você simplesmente tiver duas opções escolhidas entre uma condição *TRUE/FALSE condition*. 33 | 34 | ```javascript 35 | condicao ? valor1 : valor2; 36 | ``` 37 | 38 | Se condição for `TRUE`, o operador terá o valor de `valor1`. Caso contrário, terá o valor de `valor2`. Você pode utilizar o operador condicional em qualquer lugar onde utilizaria um operador padrão. 39 | 40 | Outra maneira de utilizarmos o operador ternário é usá-lo para simplificar a condicional if...else if...else. 41 | 42 | ```javascript 43 | condicao ? valor1 : outraCondicao ? valor2 : valor3; 44 | ``` 45 | 46 | Se condição for `TRUE`, o operador terá o valor de `valor1`. Caso contrário, irá para a `outraCondicao` e se for `TRUE`, o operador terá o valor de `valor2` e por último se não corresponder a nenhuma condição caíra no else e o operador terá o valor de `valor3`. Você pode utilizar o operador condicional em qualquer lugar onde utilizaria um operador padrão. 47 | 48 | ### SWITCH 49 | 50 | Descrição: Em alguns casos você terá diversas condições, este é o trabalho do `switch`. 51 | Eles tomam uma única expressão/valor como uma entrada e, em seguida, examinam várias opções até encontrarem um que corresponda a esse valor, executando o código correspondente que o acompanha. 52 | 53 | Usando o `break`, encerra o loop atual; 54 | Usando o `continue`, encerrará a iteração do loop e continua para o próximo iterando. 55 | 56 | ```javascript 57 | switch (expression) { 58 | case choice1: 59 | // código para executar 60 | break; 61 | 62 | case choice2: 63 | // código para executar 64 | break; 65 | 66 | // podem ser incluídos quantos casos precisar. 67 | 68 | default: 69 | // se não for nenhum caso, executa este caso 70 | } 71 | ``` 72 | 73 | Outro exemplo de uso do switch é o `Multi-caso: Operação Simples` (Multi-case : single operation) 74 | 75 | Utilizar esse método tem a vantagem de não ter um `break` depois do case e continuara sendo executado mesmo que o critério não seja correspondido. 76 | 77 | No exemplo abaixo temos uma operação sequencial simples, onde três valores diferentes retornam a mesma coisa 78 | 79 | ```javascript 80 | var Color = 'Red'; 81 | switch (Color) { 82 | case 'Pink': 83 | case 'Purple': 84 | case 'Orange': 85 | console.log('This is not a primary color.'); 86 | break; 87 | case 'Blue': 88 | default: 89 | console.log('This is a primary color.'); 90 | } 91 | [Proximo Capitulo](./8_Estruturas-de-repeticao.md) -------------------------------------------------------------------------------- /4_Basico/8_Estruturas-de-repeticao.md: -------------------------------------------------------------------------------- 1 | # 4.8 - Estruturas de repetição (laços) 2 | 3 | Descrição: Estruturas de repetição, também chamados de laços, são uma maneira fácil e rápido de executar uma ação várias vezes com pouco código. 4 | 5 | ### FOR 6 | 7 | Um laço `for` é repetido até que a condição especificada seja `FALSE`. 8 | 9 | ```javascript 10 | for ([expressaoInicial]; [condicao]; [incremento]) { 11 | // ações a serem repetidas 12 | } 13 | ``` 14 | 15 | Quando um `for` é executado, ocorre o seguinte: 16 | 17 | - A expressão `expressaoInicial` é inicializada e, caso possível, é executada. Normalmente essa expressão inicializa um ou mais contadores, mas a sintaxe permite expressões de qualquer grau de complexidade. Podendo conter também declaração de variáveis. 18 | 19 | - A expressão `condicao` é avaliada, caso o resultado de `condicao` seja `TRUE`, o laço é executado. Se o valor de `condicao` é `FALSE`, então o laço terminará. Se a expressão `condicao` é omitida, a `condicao` é assumida como `TRUE`. 20 | 21 | - A instrução é executada. Para executar múltiplas declarações, use uma declaração em bloco (`{ ... }`) para agrupá-las. 22 | 23 | - A atualização da expressão `incremento`, se houver, executa, e retorna o controle para o próximo passo. 24 | 25 | ### DO ... WHILE 26 | 27 | A instrução `do...while` repetirá até que a condição especificada seja `FALSE`. 28 | 29 | ```javascript 30 | do { 31 | // ações a serem repetidas 32 | } while (condicao); 33 | ``` 34 | 35 | A instrução será executada uma vez antes da condição ser verificada. 36 | Caso a condicao seja `TRUE`, então o laço será executado novamente. 37 | Ao final de cada execução, a `condicao` é verificada. 38 | Quando a condição contida no `while` for `FALSE` a execução do laço é terminada. 39 | 40 | ### WHILE 41 | 42 | Uma declaração `while` executa suas instruções, desde que uma condição especificada seja avaliada como `TRUE`. 43 | 44 | ```javascript 45 | while (condicao) { 46 | // ações a serem repetidas 47 | } 48 | ``` 49 | 50 | O teste da condição ocorre antes que o laço seja executado. 51 | 52 | ### FOR.. IN 53 | 54 | O laço `for.. in` passa por todas propriedades de um objeto. 55 | 56 | ```javascript 57 | const numeros = [1,2,3,4,5]; 58 | for ( numero in numeros) { 59 | // ações a serem feitas 60 | console.log(numero); 61 | } 62 | 63 | // resultado: 1, 2, 3, 4, 5 64 | ``` 65 | 66 | ### FOR.. OF 67 | 68 | O laço `for.. of` passa por todos os elementos de um coleção (`Array`, `Map`, `Set`, `Arguments`, `Object`). 69 | 70 | ```javascript 71 | const numeros = [1,2,3,4,5]; 72 | for (numero of numeros) { 73 | // ações a serem feitas 74 | console.log(numero); 75 | } 76 | 77 | // resultado: 0, 1, 2, 3, 4 78 | ``` 79 | 80 | [Proximo Capitulo](./9_Funcoes.md) -------------------------------------------------------------------------------- /4_Basico/9_Funcoes.md: -------------------------------------------------------------------------------- 1 | # 4.8 - Funções 2 | 3 | Descrição: é um bloco de códigos, que conseguimos utilizar sempre que chamarmos em qualquer parte da nossa aplicação, para realizar uma ação. 4 | 5 | Uma função é definida pela palavra reservada `function`, seguida por um _nome_ e então os parenteses `()`. 6 | 7 | - Os nomes das funções podem conter letras, números, sublinhado e caracteres especiais. 8 | 9 | - Dentro dos parenteses, você insere os parâmetros - os parâmetros são dados enviados a função, aos quais serão processados pela função. 10 | 11 | - O código a ser executado pela função, deve estar dentro de Chaves `{}` 12 | 13 | ```javascript 14 | function nome_funcao(param1, param2) { 15 | // código a ser executado 16 | } 17 | ``` 18 | 19 | Basicamente caso eu precisar multiplicar um número com outro eu preciso fazer o procedimento a seguir: 20 | 21 | ```javascript 22 | // criação da função 23 | function multiplicar(param1, param2) { 24 | // aqui vai entrar o seu código 25 | let result = param1 * param2; 26 | 27 | return result; 28 | } 29 | 30 | // chamar a função passando os parâmetros 31 | let resultado = multiplicar(2, 2); 32 | 33 | console.log(resultado); // mostra no console o resultado (4) 34 | ``` 35 | 36 | ### Para que isso? 37 | 38 | Nós podemos _reutilizar os códigos_ a partir de funções, por exemplo sempre que precisarmos multiplicar números, podemos usar a função citada acima. 39 | 40 | ### Além disso 41 | 42 | #### Funções anonimas 43 | 44 | Além de declarar funções podemos usar funções anonimas, que nos permite passar uma função como um objeto qualquer. 45 | 46 | ```javascript 47 | var fibonacci = function (num) { 48 | if (num == 1 || num == 2) return 1; 49 | else return fibonacci(num - 1) + fibonacci(num - 2); 50 | }; 51 | 52 | console.log(fibonacci(10)); // 55 53 | ``` 54 | 55 | ### Função auto-invocável 56 | 57 | IIFE (Immediately Invoked Function Expression) 58 | 59 | É uma função anônima entre parênteses, seguida por outro par de parênteses, que representa sua chamada e vai ser executada assim que o arquivo for executado. 60 | 61 | ```javascript 62 | ( 63 | function() { 64 | let name = 'salve quebrada!' 65 | return name; 66 | } 67 | )(); 68 | 69 | //salve quebrada! 70 | ``` 71 | 72 | Também pode ser utilizada com parâmetros ou armazenar o seu retorno em uma variável. 73 | 74 | ```javascript 75 | ( 76 | function(a, b) { 77 | return a+b; 78 | } 79 | )(1, 2); 80 | // Imediatamente gera a saída: 81 | //3 82 | 83 | 84 | //armazenando o valor em uma variavel 85 | const soma = ( 86 | function(a, b) { 87 | return a+b; 88 | } 89 | )(1, 2); 90 | // Imediatamente gera a saída: 91 | // soma 92 | // "3" 93 | ``` 94 | 95 | [Proximo Capitulo](./10_Exceptions.md) 96 | -------------------------------------------------------------------------------- /5_DOM-DocumentObjectModel/1_Introducao.md: -------------------------------------------------------------------------------- 1 | # 5.1 - Introdução a DOM (Documento Object Model) 2 | 3 | Descrição: Sempre que uma página é carregada, o navegador cria um *DOM* (Document Object Model) para a gente. 4 | 5 | Com este *DOM* criado, podemos acessar e mudar qualquer elemento utilizando o javascript. 6 | 7 |

8 | arvore de elementos no DOM 9 | uma ilustração mostrando como o DOM estabelece os elementos no DOM. 10 |

11 | 12 | O DOM define: 13 | - Os elementos como objetos, 14 | - As propriedades dos elementos, 15 | - Os métodos, 16 | - Os eventos. 17 | 18 | Basicamente, o DOM define um maneira de pegar(`get`), mudar(`change`), adicionar(`set`) ou deletar(`delete`) cada elemento HTML no DOM. 19 | 20 | [Proximo Capitulo](./2_Metodos-DOM.md) -------------------------------------------------------------------------------- /5_DOM-DocumentObjectModel/2_Metodos-DOM.md: -------------------------------------------------------------------------------- 1 | # 5.2 - Métodos do DOM 2 | 3 | Descrição: Através do DOM pode-se ter acesso às propriedades. Estas propriedades servem para poder pegar (`get`) e alterar (`set`) os elementos que foram processados. 4 | 5 | O DOM nos dá acesso também aos métodos, os quais são ações que conseguimos desempenhar na nossa aplicação. Estas ações podem ser, adicionar, remover, alterar entre diversas outras coisas. 6 | 7 | Um exemplo do método é o `document.getElementById()`, veja a seguir: 8 | 9 | ```html 10 |

11 | 12 | 15 | ``` 16 | 17 | Neste exemplo, usamos o método `getElementById` e a propriedade `innerHTML`. 18 | 19 | [Proximo Capitulo](./3_Acessando-Elementos.md) -------------------------------------------------------------------------------- /5_DOM-DocumentObjectModel/3_Acessando-Elementos.md: -------------------------------------------------------------------------------- 1 | # 5.3 - Acessando Elementos 2 | 3 | - Métodos para encontrar um ou mais elementos no DOM. 4 | 5 | É possível localizar elementos HTML: 6 | 7 | - por ID; 8 | - por data-attribute; 9 | - pelo nome da tag; 10 | - pelo nome da classe; 11 | - por seletores CSS; 12 | - por coleções de objetos HTML. 13 | 14 | | Método | Descrição | 15 | | ------------------------------------------ | ---------------------------------------------------------------------------------- | 16 | | document.getElementById(id) | Encontra um elemento por seu Id | 17 | | document.querySelector("[data-attribute]") | Encontra um elemento por seu data-attribute | 18 | | document.getElementsByClassName(nome) | Encontra um elemento pela classe | 19 | | document.getElementsByTagName(tag) | Encontra um elemento pela sua tag HTML | 20 | | document.querySelector(nome) | Encontra o primeiro elemento com o valor informado (id, nome, tag, data-attribute) | 21 | | document.querySelectorAll(name) | Encontra todos os elementos com o valor informado (id, nome, tag, data-attribute) | 22 | 23 | [Proximo Capitulo](./4_Alterando-Elementos.md) -------------------------------------------------------------------------------- /5_DOM-DocumentObjectModel/4_Alterando-Elementos.md: -------------------------------------------------------------------------------- 1 | # 5.4 - Alterando elementos 2 | 3 | - Métodos para alterar o elemento do DOM. 4 | 5 | | Método | Descrição | 6 | | -------------------------------------- | ----------------------------------------------- | 7 | | element.innerHTML = new html content | Alterar o HTML interno de um elemento | 8 | | element.attribute = new value | Alterar o valor do atributo de um elemento HTML | 9 | | element.style.property = new style | Alterar o estilo de um elemento HTML | 10 | | element.setAttribute(attribute, value) | Alterar o valor do atributo de um elemento HTML | 11 | 12 | ## Alterando Conteúdo 13 | - A maneira mais fácil de modificar o conteúdo do HTML é usando a propriedade `innerHTML`. 14 | 15 | ```javascript 16 | document.getElementById(id).innerHTML = new HTML(); 17 | ``` 18 | 19 | ## Alterando Atributos 20 | - Podemos alterar também atributos, como por exemplo: 21 | 22 | ```javascript 23 | document.getElementById(id).attribute = new value; 24 | ``` 25 | 26 | ## Alterando Estilos 27 | - Para alterar estilos de um elemento HTML usa-se: 28 | 29 | ```javascript 30 | document.getElementById(id).style.property = new style; 31 | ``` 32 | [Proximo Capitulo](./5_Removendo-Elementos.md) -------------------------------------------------------------------------------- /5_DOM-DocumentObjectModel/5_Removendo-Elementos.md: -------------------------------------------------------------------------------- 1 | # 5.4 - Removendo elementos do DOM 2 | 3 | - Métodos para remover um elemento do DOM. 4 | 5 | | Método | Descrição | 6 | | ------------------------------- | ------------------------------ | 7 | | document.createElement(element) | Criar um elemento HTML | 8 | | document.removeChild(element) | Remover um elemento HTML | 9 | | document.appendChild(element) | Adicionar um elemento HTML | 10 | | document.replaceChild(new, old) | Substituir um elemento HTML | 11 | | document.write(text) | Escreva no fluxo de saída HTML | 12 | 13 | 14 | [Proximo Capitulo](./6_Event-Handlers.md) -------------------------------------------------------------------------------- /5_DOM-DocumentObjectModel/6_Event-Handlers.md: -------------------------------------------------------------------------------- 1 | # 5.6 - Event Handlers 2 | 3 | - Podemos executar um script quando um evento ocorre. 4 | 5 | Os eventos podem ser quando: 6 | 7 | - Um usuário clica no mouse; 8 | - Uma página da web é carregada; 9 | - Uma imagem é carregada; 10 | - O mouse se move sobre um elemento; 11 | - Um campo de entrada é alterado; 12 | - Um formulário HTML é enviado; 13 | - Um usuário pressiona uma tecla. 14 | 15 | ## Atributos de evento HTML 16 | 17 | - Para atribuir eventos a elementos HTML, você pode usar atributos de evento. 18 | 19 | ```html 20 | 21 | ``` 22 | 23 | ## Atribuir eventos usando o DOM HTML 24 | 25 | - O DOM HTML permite atribuir eventos a elementos HTML usando JavaScript: 26 | 27 | ```javascript 28 | document.getElementById("myBtn").onclick = fazAlgumaCoisa; 29 | ``` 30 | 31 | ## Os eventos onload e onunload 32 | 33 | - Os eventos `onload` e `onunload` são acionados quando o usuário entra ou sai da página. 34 | 35 | - O `onload` evento pode ser usado para verificar o tipo e a versão do navegador do visitante e carregar a versão adequada da página da Web com base nas informações. 36 | 37 | - Os eventos `onload` e `onunload` podem ser usados ​​para lidar com cookies. 38 | 39 | ```html 40 | 41 | ``` 42 | 43 | ## O evento onchange 44 | 45 | - O evento `onchange` é frequentemente usado em combinação com a validação dos campos de entrada. 46 | 47 | ```html 48 | 49 | ``` 50 | 51 | ## Os eventos onmouseover e onmouseout 52 | 53 | - Os eventos `onmouseover` e `onmouseout` podem ser usados ​​para disparar uma função quando o usuário passa o mouse sobre ou fora de um elemento HTML: 54 | 55 | ```html 56 |
57 | Mouse Over Me 58 |
59 | ``` 60 | 61 | ## Eventos onmousedown, onmouseup e onclick 62 | 63 | - Os eventos `onmousedown`, `onmouseup` e `onclick` são todos partes de um clique do mouse. Primeiro, quando um botão do mouse é clicado, o evento `onmousedown` é acionado; depois, quando o botão do mouse é liberado, o evento `onmouseup` é acionado; finalmente, quando o clique do mouse é concluído, o evento `onclick` é acionado. 64 | 65 | ```html 66 |
67 | Click Me 68 |
69 | ``` 70 | 71 | ## Evento onfocus 72 | 73 | - Altera atributos quando um campo de entrada recebe o foco. 74 | 75 | ```html 76 | 77 | ``` 78 | 79 | [Proximo Capitulo](./7_Event-Listener.md) -------------------------------------------------------------------------------- /5_DOM-DocumentObjectModel/7_Event-Listener.md: -------------------------------------------------------------------------------- 1 | # 5.7 - Event Listener 2 | 3 | - O método `addEventListener()` anexa um manipulador de eventos ao elemento especificado, facilitando o controle de como o elemento reage a cada interação com o usuário. 4 | 5 | - Você pode adicionar ouvintes de eventos a qualquer objeto DOM, não apenas aos elementos HTML, ou seja, o objeto da janela. 6 | 7 | ## Sintaxe 8 | 9 | ```javascript 10 | element.addEventListener(event, function); 11 | ``` 12 | 13 | 1. O primeiro parâmetro é o tipo de evento (como explicado em [Event Handlers](/5_DOM-DocumentObjectModel/7_Event-Handlers.md)). 14 | 15 | 2. O segundo parâmetro é a função que queremos chamar quando o evento ocorrer. 16 | 17 | [Atividades](../6_Atividades/Atividades.txt) -------------------------------------------------------------------------------- /6_Atividades/Atividades.txt: -------------------------------------------------------------------------------- 1 | ATIVIDADES DE LÓGICA DE PROGRAMAÇÃO COM JAVASCRIPT 2 | 3 | 01 - Crie uma função que retorna a string "Olá, " concatenada com um argumento text (a ser passado para a função) e 4 | com ponto de exclamação "!" no final. 5 | 6 | Exemplo: 7 | 8 | cumprimentar("Leonardo") // retornará "Olá, Leonardo!" 9 | 10 | ---------------------------------------------------------------------------------------------------------- 11 | 12 | 02 - Escreva uma função que receba a idade de uma pessoa em anos e retorne a mesma idade em dias. 13 | OBS: Considere que um ano tem 365 dias. Desconsidere anos bissextos (com 366 dias) e desconsidere 14 | também dias decorridos desde o último aniversário. 15 | 16 | Exemplo: 17 | 18 | converterIdadeEmAnosParaDias(25) // retornará 9125 19 | 20 | ---------------------------------------------------------------------------------------------------------- 21 | 22 | 03 - Desenvolva uma função que recebe dois parâmetros, um é a quantidade de horas trabalhadas por um funcionário 23 | num mês, e o quanto ele recebe por hora. A função deverá calcular o salário líquido mensal do funcionário, que é 24 | da quantidade de horas trabalhadas no mês multiplicada pelo valor da sua hora. Desse valor, deve ser subtraído 25 | 30%, relativo a impostos. O retorno da função deve ser a string "Salário líquido é igual a R$ X", em que X é o salário líquido do funcionário no mês. 26 | 27 | Exemplo: 28 | 29 | calcularSalarioLiquido(180, 60) //Retornará "Salário igual a R$ 7560". 30 | 31 | ---------------------------------------------------------------------------------------------------------- 32 | 33 | 04 - Crie uma função que recebe um número (de 1 a 12 e retorne o mês correspondente como uma string. Por 34 | exemplo, se a entrada for 2, a função deverá retornar "fevereiro", pois este é o 2° mês. 35 | 36 | Exemplo: 37 | 38 | receberNomeDoMes(1) // retornará "janeiro" 39 | 40 | ---------------------------------------------------------------------------------------------------------- 41 | 42 | 05 - Crie uma função que receba dois números e retorne se o primeiro é maior ou igual ao segundo. Deverá diferenciar 43 | números de strings. 44 | 45 | Exemplo: 46 | 47 | maiorOuIgual(0, 0) // retornará true 48 | maiorOuIgual(0, "0") //retornará false 49 | 50 | ---------------------------------------------------------------------------------------------------------- 51 | 52 | 06 - Escreva uma função que receba um valor booleano ou numérico. Se o parâmetro fornecido for booleano, o 53 | retorno da função deverá ser o inverso. Por exemplo, se a entrada for false, retornará true. Se o parâmetro for 54 | numérico, o retorno será o número inverso. Por exemplo, se for fornecido 1, o retorno será 1. Se o parâmetro de 55 | entrada não for de nenhum dos tipo acima, retorne "booleano ou número esperados, mas o parâmetro é do tipo ...". 56 | 57 | Exemplo: 58 | 59 | inverso(true) // retornará false 60 | inverso("6") // retornará "booleano ou número esperados, mas o parâmetro é do tipo string" 61 | 62 | ---------------------------------------------------------------------------------------------------------- 63 | 64 | 07 - Crie uma função que receba quatro números como parâmetro (numero, minimo, maximo, inclusivo) e retorne se o 65 | parâmetro numero (o primeiro) está entre minimo e maximo. Quando o parâmetro inclusivo for true, tenha "entre" 66 | como inlusivo, ou seja, considerando se numero é igual a minimo ou a maximo. Caso o parâmetro inclusivo não 67 | seja informado, seu valor padrão deverá ser false, portanto, a lógica será exclusiva, não considerando se numero 68 | é igual a minimo ou a maximo. 69 | 70 | Exemplo: 71 | 72 | estaEntre(10, 10, 50) // retornará true 73 | estaEntre(16, 100, 160) // retornará false 74 | 75 | ---------------------------------------------------------------------------------------------------------- 76 | 77 | 08 - Desenvolva uma função que recebe dois números inteiros não negativos (maiores ou iguais a zero) e realize a 78 | multiplicação deles. Porém, não utilize o operador de mutiplicação. 79 | 80 | Exemplo: 81 | 82 | multiplicar(5, 5) // retornará 25 83 | multiplicar(0, 7) // retornará 0 84 | 85 | ---------------------------------------------------------------------------------------------------------- 86 | 87 | 09 - Escreva uma função que receba dois parâmetros. O primeiro parâmetro é o elemento que repetirá, enquanto que 88 | o segundo será o número de vezes que haverá repetição. Um array será retornado. 89 | 90 | Exemplo: 91 | 92 | repetir("código", 2) // retornará ["código", "código"] 93 | repetir(7, 3) // retornará [7, 7, 7] 94 | 95 | ---------------------------------------------------------------------------------------------------------- 96 | 97 | 10 - Elabore uma função que recebe um número como parâmetro e retorne uma string com o símbolo "+" na 98 | quantidade especificada no parâmetro. 99 | 100 | Exemplo: 101 | 102 | simboloMais(2) // retornará "++" 103 | simboloMais(4) // retornará "++++" -------------------------------------------------------------------------------- /6_Atividades/Resolucao-Atividades-01.js: -------------------------------------------------------------------------------- 1 | /* RESOLUÇÃO DAS ATIVIDADES-01 */ 2 | 3 | /* OBS: PODEM EXISTIR OUTRAS FORMAS DE RESOLUÇÃO */ 4 | 5 | //01 6 | function cumprimentar(nome) { 7 | return `Olá, ${nome}!`; 8 | } 9 | 10 | //02 11 | function converterIdadeParaDias(idade) { 12 | const diasdoAno = 365; 13 | return diasdoAno * idade; 14 | } 15 | 16 | //03 17 | function calcularSalarioLiquido(horasTrabalhadas, ganhoPorHora) { 18 | const salarioBruto = horasTrabalhadas * ganhoPorHora; 19 | const salarioLiquido = salarioBruto - salarioBruto * 30 / 100; 20 | 21 | return `Salário igual a R$ ${salarioLiquido}`; 22 | } 23 | 24 | 25 | //04 26 | function receberNomeDoMes(numeroDoMes) { 27 | const meses = ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"]; 28 | 29 | return meses[--numeroDoMes]; 30 | } 31 | 32 | //05 33 | function maiorOuIgual(primeiro, segundo) { 34 | if (typeof primeiro != typeof segundo) { 35 | return false 36 | } 37 | 38 | return primeiro >= segundo; 39 | } 40 | 41 | //06 42 | function inverso(valor) { 43 | const tipo = typeof valor; 44 | 45 | if (tipo === "boolean") { 46 | return !valor; 47 | } else if (tipo === "number") { 48 | return -valor; 49 | } else { 50 | return `Booleano ou Número esperados, mas o parâmetro é do tipo ${tipo}`; 51 | } 52 | } 53 | 54 | //07 55 | function estaEntre(min, max, numero, inclusivo = false) { 56 | if (inclusivo) { 57 | return numero >= min && numero <= max; 58 | } else { 59 | return numero > min && numero < max; 60 | } 61 | 62 | //RESOLUÇÃO COM OPERADORES TERNÁRIOS 63 | //return inclusivo ? numero >= min && numero <= max : numero > min && numero < max; 64 | } 65 | 66 | //08 67 | function multiplicar(numeroA, numeroB) { 68 | let resultado = 0 69 | 70 | for (let i = 0; i < numeroB; i++) { 71 | resultado += numeroA 72 | } 73 | 74 | return resultado 75 | } 76 | 77 | //09 78 | function repetir(item, qtd) { 79 | return Array(qtd).fill(item); 80 | } 81 | 82 | //10 83 | function simboloMais(qtd) { 84 | return "+".repeat(qtd); 85 | } 86 | 87 | 88 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Vinicius Silva 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Javascript4Noobs 2 | 3 |

4 | javascript 5 | 6 |

Tutorial de Javascript para iniciantes na linguagem.

7 |

8 | 9 | License MIT 10 | 11 |

12 |
13 |

14 | 15 | ## Sobre o Projeto 16 | 17 | ### Olá viajante... 18 | 19 | A jornada pelo mundo da Web não é nada fácil, mas se você chegou até aqui é por que tem vontade de adentrar esse mundo. Sem mais obstáculos pelo caminho, vamos lá... 20 | 21 | Bem vindo ao curso de Javascript da He4rt Developers. 22 | 23 | Ficamos muito felizes de você ter chegado até aqui em nosso curso! Estaremos trabalhando nos próximos passos para que você ganhe um conhecimento básico para começar a programar em **JavaScript**. 24 | 25 | > _Como estaremos usando inicialmente o Github para a hospedagem deste material, pedimos para que no caso de qualquer dúvida ou até sugestões de melhoria, que você cria um [**Issue**](https://github.com/ThiagoDellaNoce/javascript4noobs/issues) neste mesmo repositório, assim, conseguimos resolver essas questões dentro do nosso projeto._ 26 | 27 | ## Módulos 28 | 29 | ### Introdução 30 | 31 | 1. [Hello World](/1_Introducao/1_Hello-World.md) 32 | 33 | ### Resumo 34 | 35 | 1. [Resumo](/2_Resumo/1_Resumo.md) 36 | 37 | ### Ambiente 38 | 39 | 1. [Editores e plugins](/3_Ambiente/1_Editores-e-plugins.md) 40 | 41 | ### Básico 42 | 43 | 1. [Saída](/4_Basico/1_Saida.md) 44 | 2. [Comentários](/4_Basico/2_Comentarios.md) 45 | 3. [Tipos de dados](/4_Basico/3_Tipos-de-dados.md) 46 | 4. [Variáveis](/4_Basico/4_Variaveis.md) 47 | 5. [Operadores Aritméticos](/4_Basico/5_Operadores-Aritmeticos.md) 48 | 6. [Operadores Lógicos](/4_Basico/6_Operadores-Logicos.md) 49 | 7. [Condicionais](/4_Basico/7_Condicionais.md) 50 | 8. [Estruturas de repetição](/4_Basico/8_Estruturas-de-repeticao.md) 51 | 9. [Funções](/4_Basico/9_Funcoes.md) 52 | 10. [Exceptions](/4_Basico/10_Exceptions.md) 53 | 11. [Operadores de Atribuição](/4_Basico/11_Operadores_de_Atribuicao.md) 54 | 12. [Principais métodos de Array](/4_Basico/12_PrincipaisMetodosArray.md) 55 | 13. [Entendendo o this](/4_Basico/13_Entendendo_o_this.md) 56 | 14. [Objetos](/4_Basico/14_Objetos.md) 57 | 58 | ### DOM (Document Object Model) 59 | 60 | 1. [Introdução](/5_DOM-DocumentObjectModel/1_Introducao.md) 61 | 2. [Métodos do DOM](/5_DOM-DocumentObjectModel/2_Metodos-DOM.md) 62 | 3. [Métodos de Acesso ao DOM](/5_DOM-DocumentObjectModel/3_Acessando-Elementos.md) 63 | 4. [Métodos de Alteração do DOM](/5_DOM-DocumentObjectModel/4_Alterando-Elementos.md) 64 | 5. [Métodos de Remoção de elementos do DOM](/5_DOM-DocumentObjectModel/5_Removendo-Elementos.md) 65 | 6. [Event Handlers](/5_DOM-DocumentObjectModel/6_Event-Handlers.md) 66 | 7. [Event Listener](/5_DOM-DocumentObjectModel/7_Event-Listener.md) 67 | 68 | ### Atividades 69 | 1. [Atividades](/6_Atividades/Atividades.txt) 70 | 2. [40 Atividades Básicas de Javacript](https://github.com/gabrieldarezzo/helpjs-ravi) 71 | 72 | # Como Contribuir com o 4noobs 73 | 74 | Contribuições fazem com que a comunidade open source seja um lugar incrível para aprender, inspirar e criar. Todas contribuições 75 | são **extremamente apreciadas** 76 | 77 | 1. Realize um Fork do projeto 78 | 2. Crie um branch com a nova feature (`git checkout -b feature/featureBraba`) 79 | 3. Realize o Commit (`git commit -m 'Add some featureBraba'`) 80 | 4. Realize o Push no Branch (`git push origin feature/featureBraba`) 81 | 5. Abra um Pull Request 82 | 83 | ## Autores 84 | 85 | - **Thiago Della Noce** - _Front-end Developer_ - [Linkedin](https://www.linkedin.com/in/thiagodellanoce/) 86 | 87 |

Made with 💜
He4rt Developers

88 | -------------------------------------------------------------------------------- /assets/3-1-saida-exemplo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThiagoDellaNoce/javascript4noobs/d9ab1efe7f75b5eb2297b16f190ff89d682c0b81/assets/3-1-saida-exemplo.png -------------------------------------------------------------------------------- /assets/gavetaObj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThiagoDellaNoce/javascript4noobs/d9ab1efe7f75b5eb2297b16f190ff89d682c0b81/assets/gavetaObj.png -------------------------------------------------------------------------------- /assets/javascript.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThiagoDellaNoce/javascript4noobs/d9ab1efe7f75b5eb2297b16f190ff89d682c0b81/assets/javascript.png -------------------------------------------------------------------------------- /assets/navigator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThiagoDellaNoce/javascript4noobs/d9ab1efe7f75b5eb2297b16f190ff89d682c0b81/assets/navigator.png -------------------------------------------------------------------------------- /assets/promise_catch_result.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThiagoDellaNoce/javascript4noobs/d9ab1efe7f75b5eb2297b16f190ff89d682c0b81/assets/promise_catch_result.png -------------------------------------------------------------------------------- /assets/promise_then_result.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThiagoDellaNoce/javascript4noobs/d9ab1efe7f75b5eb2297b16f190ff89d682c0b81/assets/promise_then_result.png -------------------------------------------------------------------------------- /assets/retorno_da_promise.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThiagoDellaNoce/javascript4noobs/d9ab1efe7f75b5eb2297b16f190ff89d682c0b81/assets/retorno_da_promise.png --------------------------------------------------------------------------------