├── .editorconfig ├── .gitignore ├── 02-instalando-kit-ferramentas └── README.md ├── 03-primeira-aplicacao ├── README.md └── index.js ├── 04-comentarios ├── README.md └── reverse.js ├── 05-variaveis ├── README.md └── demo.js ├── 06-strings ├── README.md ├── strings_concatenation.js └── strings_templateliterals.js ├── 07-tipos-dados ├── README.md ├── demo.js └── demo_solution.js ├── 08-numeros-matematica ├── README.md ├── numbers_conversions.js └── numbers_performingmath.js ├── 09-errors-try-catch-finally ├── Errors_trycatchfinally.js └── README.md ├── 10-datas ├── README.md └── dates.js ├── 11-logica-booleana ├── README.md ├── and.js ├── case-sensitive.js ├── if-else.js ├── if-ternary.js ├── if-terse.js ├── implicit-false.js └── switch.js ├── 12-arrays ├── README.md ├── array_methods.js ├── create_arrays.js └── populating_arrays.js ├── 13-lacos ├── README.md └── demo.js ├── 14-funcoes ├── 1-functions.js ├── README.md └── functions-demo.js ├── 15-arrow-functions ├── README.md └── demo.js ├── 16-objetos-json ├── README.md ├── json-demo.js └── objects-demo.js ├── 17-promises-async ├── README.md ├── async-await.js └── promise-demo.js ├── 18-packages ├── .gitignore ├── README.md ├── index.js ├── package-lock.json └── package.json ├── CODE_OF_CONDUCT.md └── README.md /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: https://EditorConfig.org 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | [*] 7 | indent_style = space 8 | indent_size = 2 9 | end_of_line = lf 10 | charset = utf-8 11 | trim_trailing_whitespace = true 12 | insert_final_newline = true -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # TypeScript v1 declaration files 45 | typings/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | 78 | # Next.js build output 79 | .next 80 | 81 | # Nuxt.js build / generate output 82 | .nuxt 83 | dist 84 | 85 | # Gatsby files 86 | .cache/ 87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 88 | # https://nextjs.org/blog/next-9-1#public-directory-support 89 | # public 90 | 91 | # vuepress build output 92 | .vuepress/dist 93 | 94 | # Serverless directories 95 | .serverless/ 96 | 97 | # FuseBox cache 98 | .fusebox/ 99 | 100 | # DynamoDB Local files 101 | .dynamodb/ 102 | 103 | # TernJS port file 104 | .tern-port 105 | -------------------------------------------------------------------------------- /02-instalando-kit-ferramentas/README.md: -------------------------------------------------------------------------------- 1 | # Instalando seu kit de ferramentas 2 | 3 | Para começar a desenvolver códigos em JavaScript em [Node.js](https://nodejs.org/), você precisará de algumas ferramentas. Em particular, você precisará instalar o Node.js e um editor de código. 4 | 5 | - [Download do Visual Studio Code](https://code.visualstudio.com?WT.mc_id=javascript-34431-gllemos) 6 | - [Tutorial: Configurando seu ambiente de desenvolvimento Node.js diretamente no Windows](https://docs.microsoft.com/windows/nodejs/setup-on-windows?WT.mc_id=javascript-34431-gllemos) 7 | - [Tutorial: Configure seu ambiente de desenvolvimento Node.js com WSL 2](https://docs.microsoft.com/windows/nodejs/setup-on-wsl2?WT.mc_id=javascript-34431-gllemos) 8 | - [Versão NVM para Linux, macOS ou WSL](https://github.com/nvm-sh/nvm/blob/master/README.md) 9 | - [Versão NVM para Windows](https://github.com/coreybutler/nvm-windows) 10 | -------------------------------------------------------------------------------- /03-primeira-aplicacao/README.md: -------------------------------------------------------------------------------- 1 | # Criando sua primeira aplicação em Node.js 2 | 3 | Quando você está aprendendo uma nova linguagem de programação pela primeira vez, é de costumer sempre criar o famoso **[Olá, mundo](https://en.wikipedia.org/wiki/%22Hello,_World!%22_program)**. Não somos de quebrar a tradição, então fizemos o mesmo com algumas coisinhas extras. 4 | 5 | ## Leitura adicional 6 | 7 | - [Tutorial: Comece a usar Node.js no Windows para iniciantes](https://docs.microsoft.com/windows/nodejs/beginners?WT.mc_id=javascript-34431-gllemos) 8 | - [console.log](https://nodejs.org/dist/latest-v12.x/docs/api/console.html#console_console_log_data_args) 9 | -------------------------------------------------------------------------------- /03-primeira-aplicacao/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: index.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar a criar Hello World 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | const message = 'Hello'; 9 | const place = 'World'; 10 | 11 | // logging out a string 12 | console.log('Hello, World!'); 13 | 14 | // using substitutions 15 | console.log('Hello, %s!', place); 16 | 17 | // using a string literal 18 | console.log(`${message}, ${place}!`); 19 | -------------------------------------------------------------------------------- /04-comentarios/README.md: -------------------------------------------------------------------------------- 1 | # Comentários 2 | 3 | **[Comentários](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Comments)** permitem que você deixe notas sobre o que seu código está fazendo. E também, uma ferramenta poderosa para deixar anotações, o que é maravilhoso para aprender o código! 4 | 5 | ## Leituras Adicionais 6 | 7 | - [Comentários](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Comments) 8 | -------------------------------------------------------------------------------- /04-comentarios/reverse.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: reverse.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar usar comentários em JavaScript 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | function reverseString(value) { 9 | let reversedValue = ''; 10 | 11 | value.split('').forEach((char) => { 12 | reversedValue = char + reversedValue; 13 | }); 14 | 15 | return reversedValue; 16 | } 17 | 18 | console.log(reverseString('Reverse Me')); 19 | -------------------------------------------------------------------------------- /05-variaveis/README.md: -------------------------------------------------------------------------------- 1 | # Variáveis 2 | 3 | Variáveis são espaços reservados para armazenar informações que você usará na sua aplicação. Eles podem ser relativamente pequenos, como um número, ou grandes, como objetos complexos. Independentemente dos dados que a variável armazenará, você os declarará todos iguais. O que mudará é onde você gostaria que a variável existisse e a capacidade de modificá-la. 4 | 5 | ## Leituras Adicionais 6 | 7 | - [const](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const) 8 | - [let](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let) 9 | - [var](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var) 10 | -------------------------------------------------------------------------------- /05-variaveis/demo.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: demo.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar uso de variáveis em JavaScript 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | var hello = 'Hello'; 9 | 10 | console.log(hello); 11 | hello = 'Hello World'; 12 | console.log(hello); 13 | 14 | if (true) { 15 | let world = 'Hello World'; 16 | console.log(world); 17 | } 18 | // console.log(world); 19 | 20 | const aaron = 'Aaron'; 21 | console.log(aaron); 22 | 23 | // aaron = "Aaron Powell" 24 | -------------------------------------------------------------------------------- /06-strings/README.md: -------------------------------------------------------------------------------- 1 | # Strings 2 | 3 | Strings em JavaScript são coleções de zero ou mais caracteres. Trabalhar com strings é uma das habilidades básicas que todas as Pessoas Desenvolvedoras precisam saber. Felizmente, o JavaScript fornece várias maneiras de manipular e trabalhar com strings. 4 | 5 | ## Leituras Adicionais 6 | 7 | - [String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) 8 | - [Template literals](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals) 9 | -------------------------------------------------------------------------------- /06-strings/strings_concatenation.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: strings_concatenation.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar uso de strings em javascript 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | let str1 = "Hello"; 9 | let str2 = "World!"; 10 | 11 | //Using the + operator 12 | console.log("********Using the + operator********\n"); 13 | console.log(str1 + str2); 14 | console.log(str1 + "Big" + str2); 15 | 16 | console.log("\n********Adding Spacing********\n"); 17 | //Adding Spacing 18 | str1 = "Hello "; 19 | 20 | console.log(str1 + str2); 21 | console.log(str1 + "Big " + str2); 22 | 23 | console.log("\n********Be careful with numbers!********\n"); 24 | //Be careful with numbers! 25 | let num1 = 1; 26 | let num2 = "1"; 27 | 28 | console.log(num1 + num2); 29 | console.log(num1 + 1); 30 | -------------------------------------------------------------------------------- /06-strings/strings_templateliterals.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: strings_templateliterals.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar uso de strings em javascript 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | //Concatenation with template literals 9 | console.log("\n********Concatenation with template literals********\n"); 10 | 11 | let str1 = "JavaScript"; 12 | let str2 = "fun"; 13 | 14 | console.log(`I am writing code in ${str1}`); 15 | console.log(`Formatting in ${str1} is ${str2}!`); 16 | 17 | //Expressions in template literals 18 | console.log("\n********Expressions in template literals********\n"); 19 | 20 | let bool1 = true; 21 | console.log(`1 + 1 is ${1 + 1}`); 22 | console.log(`The opposite of true is ${!bool1} 23 | 24 | `); 25 | -------------------------------------------------------------------------------- /07-tipos-dados/README.md: -------------------------------------------------------------------------------- 1 | # Tipos de Dados 2 | 3 | O JavaScript é uma linguagem com [tipagem fraca](https://wikipedia.org/wiki/Strong_and_weak_typing), o que significa que ele não armazena o tipo de dados enquanto você escreve seu código. No entanto, ele oferece suporte a vários tipos de dados e mantém o tipo de dados que uma variável está armazenando no tempo de execução. Você pode até consultar uma variável para determinar o tipo de dados. 4 | 5 | ## Leituras Adicionais 6 | 7 | - [typeof](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof) 8 | -------------------------------------------------------------------------------- /07-tipos-dados/demo.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: demo.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar uso de tipo de dados em JavaScript 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | const people = ["Aaron", "Mel", "John"]; 9 | const one = 1; 10 | const str = "Hello World"; 11 | const b = true; 12 | const person = { 13 | firstName: "Aaron", 14 | lastName: "Powell", 15 | }; 16 | 17 | function sayHello(person) { 18 | console.log("Hello " + person.firstName); 19 | } 20 | -------------------------------------------------------------------------------- /07-tipos-dados/demo_solution.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: demo_solution.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar uso de tipo de dados em JavaScript 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | const people = ["Aaron", "Mel", "John"]; 9 | // const one = 1; 10 | const one = new Number(1); 11 | const str = "Hello World"; 12 | const b = true; 13 | const person = { 14 | firstName: "Aaron", 15 | lastName: "Powell", 16 | }; 17 | 18 | function sayHello(person) { 19 | console.log("Hello " + person.firstName); 20 | } 21 | 22 | console.log("-- typeof --"); 23 | console.log(typeof people); 24 | console.log(typeof one); 25 | console.log(typeof str); 26 | console.log(typeof b); 27 | console.log(typeof person); 28 | console.log(typeof sayHello); 29 | 30 | console.log("-- instanceof --"); 31 | console.log(people instanceof Array); 32 | console.log(one instanceof Number); 33 | console.log(str instanceof String); 34 | console.log(b instanceof Boolean); 35 | console.log(person instanceof Object); 36 | console.log(sayHello instanceof Function); 37 | -------------------------------------------------------------------------------- /08-numeros-matematica/README.md: -------------------------------------------------------------------------------- 1 | # Números e Matemática 2 | 3 | Pode-se dizer que um computador nada mais é que uma calculadora sofisticada. Deixaremos que você debata a validade o ditado. Mas, não há como negar que a matemática é uma das operações mais comuns que você realizará. JavaScript tem um conjunto completo de opções disponíveis para você. 4 | 5 | ## Leituras Adicionais 6 | 7 | - [Matemática](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math) 8 | -------------------------------------------------------------------------------- /08-numeros-matematica/numbers_conversions.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: numbers_conversions.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar uso números em JavaScript 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | let num1 = "150"; 9 | let flo1 = "1.50"; 10 | 11 | console.log("********Converting strings to integers********"); 12 | //Converting strings to integers 13 | console.log(parseInt("100")); 14 | console.log(parseInt(num1)); 15 | console.log(parseInt("ABC")); 16 | console.log(parseInt("0xF")); //Hexadecimal number 17 | 18 | console.log("********Converting strings to float********"); 19 | //Converting strings to float 20 | console.log(parseFloat("1.00")); 21 | console.log(parseFloat(flo1)); 22 | console.log(parseFloat("ABC")); 23 | 24 | console.log("********More Conversion Examples********"); 25 | //More Conversion Examples 26 | //Numbers after special characters are ignored 27 | console.log(parseInt("1.5")); 28 | console.log(parseInt("1 + 1")); 29 | 30 | //Using Template Literals 31 | console.log(parseInt(`${1 + 1}`)); 32 | 33 | console.log("********Converting numbers to strings********"); 34 | //Converting numbers to strings 35 | console.log(num1.toString()); 36 | console.log(flo1.toString()); 37 | console.log((100).toString()); 38 | -------------------------------------------------------------------------------- /08-numeros-matematica/numbers_performingmath.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: numbers_performingmath.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar operações matemáticas em JavaScript 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | let num1 = 100; 9 | 10 | //Basic Math 11 | console.log("********Basic Math********"); 12 | console.log(num1 + 25); 13 | console.log(num1 - 100); 14 | console.log(num1 * 100); 15 | console.log(num1 / 1500); 16 | 17 | console.log("********Additional Mathematical Operations********"); 18 | //Additional Mathematical Operations 19 | console.log(num1 % 1500); // Remainder 20 | console.log(++num1); //Increment 21 | console.log(--num1); //Decrement 22 | 23 | console.log("********Using the Math Object********"); 24 | //Using the Math Object 25 | console.log(Math.PI); //Pi 26 | console.log(Math.sqrt(num1)); //Square root 27 | -------------------------------------------------------------------------------- /09-errors-try-catch-finally/Errors_trycatchfinally.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: errors_trycatchfinally.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar operações matemáticas em JavaScript 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | function criticalCode() { 9 | throw "throwing an exception"; 10 | } 11 | 12 | function logError(theException) { 13 | console.log(theException); 14 | } 15 | 16 | //Throwing Exceptions 17 | console.log("\n********Throwing Exceptions********\n"); 18 | 19 | throw "myException"; 20 | throw true; 21 | 22 | //Try..Catch 23 | console.log("\n********Try..Catch********\n"); 24 | 25 | try { 26 | criticalCode(); 27 | } catch (ex) { 28 | console.log("Got an error"); 29 | logError(ex); 30 | } 31 | 32 | //Throwing in Try..Catch 33 | console.log("\n********Throwing in Try..Catch********\n"); 34 | 35 | try { 36 | throw "An exception that is thrown every time"; 37 | } catch (ex) { 38 | console.log("Got an error"); 39 | logError(ex); 40 | } 41 | 42 | //Try..Catch..Finally 43 | console.log("\n********Try..Catch..Finally********\n"); 44 | 45 | try { 46 | criticalCode(); 47 | } catch (ex) { 48 | console.log("Got an error"); 49 | logError(ex); 50 | } finally { 51 | console.log("Code that always will run"); 52 | } 53 | -------------------------------------------------------------------------------- /09-errors-try-catch-finally/README.md: -------------------------------------------------------------------------------- 1 | # Tratamento de erros com try/catch/finally 2 | 3 | Sempre que seu código é executado, há uma chance de que algo dê errado, especialmente se você estiver se comunicando com sistemas externos. Usando `try` /` catch` / `finally` você pode permitir que seu código pegue os erros e os trate apropriadamente. 4 | 5 | ## Leituras Adicionais 6 | 7 | - [try/catch/finally](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch) 8 | -------------------------------------------------------------------------------- /10-datas/README.md: -------------------------------------------------------------------------------- 1 | # Datas 2 | 3 | As datas podem ser um pouco complicadas de trabalhar no código. Freqüentemente, você deseja ser capaz de realizar matemática, lidar com conversões e outras operações. JavaScript fornece um objeto `Date` para dar acesso a datas e horas. 4 | 5 | ## Leituras Adicionais 6 | 7 | - [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) 8 | -------------------------------------------------------------------------------- /10-datas/dates.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: dates.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar uso de datas em JavaScript 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | const now = new Date(); 9 | const win95Launch = new Date(1995, 7, 24); 10 | 11 | console.log(now); 12 | console.log(win95Launch); 13 | 14 | const demoDate = new Date(); 15 | demoDate.setMonth(0); 16 | console.log(demoDate); 17 | 18 | console.log(`Day of week: ${demoDate.getDay()}`); 19 | console.log(`Date: ${demoDate.getDate()}`); 20 | -------------------------------------------------------------------------------- /11-logica-booleana/README.md: -------------------------------------------------------------------------------- 1 | # Lógica Booleana 2 | 3 | No centro de qualquer aplicação está a tomada de decisões. Você pode gerenciar a lógica de ramificação em JavaScript com uma instrução `if`/`else` ou `switch`/`case`. 4 | 5 | ## Leituras Adicionais 6 | 7 | - [if/else](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/if...else) 8 | - [switch](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch) 9 | -------------------------------------------------------------------------------- /11-logica-booleana/and.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: and.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar uso lógica booleana em JavaScript 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | const status = 500; 9 | 10 | if (status === 200) { 11 | console.log("OK!"); 12 | } else if (status === 400 || status === 500) { 13 | console.log("Error!"); 14 | } else { 15 | console.log("Unknown status"); 16 | } 17 | -------------------------------------------------------------------------------- /11-logica-booleana/case-sensitive.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: case-sensitive.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar uso if-else em JavaScript 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | const status = "error"; 9 | 10 | if (status.toUpperCase() === "ERROR") { 11 | console.log("Something went wrong!"); 12 | } else { 13 | console.log("Looks great!!"); 14 | } 15 | -------------------------------------------------------------------------------- /11-logica-booleana/if-else.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: if-else.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar uso de if-else em JavaScript 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | const status = 400; 9 | 10 | if (status === 200) { 11 | console.log("OK!"); 12 | } else if (status === 400) { 13 | console.log("Error!"); 14 | } else { 15 | console.log("Unknown status"); 16 | } 17 | -------------------------------------------------------------------------------- /11-logica-booleana/if-ternary.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: if-ternary.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar uso if (ternário) em JavaScript 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | const status = 200; 9 | // let message = ''; 10 | 11 | // if (status === 200) { 12 | // message = 'OK!' 13 | // } else { 14 | // message = 'Error!'; 15 | // } 16 | 17 | const message = status === 200 ? "OK!" : "Error!"; 18 | 19 | console.log(message); 20 | -------------------------------------------------------------------------------- /11-logica-booleana/if-terse.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: if-terse.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar uso de 'if' em JavaScript 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | const status = 400; 9 | 10 | if (status === 200) console.log("OK!"); 11 | else if (status === 400) console.log("Error!"); 12 | else console.log("Unknown status"); 13 | -------------------------------------------------------------------------------- /11-logica-booleana/implicit-false.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: implicit-falase.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar uso lógica booleana em JavaScript 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | const name = ""; 9 | 10 | if (name) { 11 | console.log("We have a name!"); 12 | } else { 13 | console.log("No name provided"); 14 | } 15 | -------------------------------------------------------------------------------- /11-logica-booleana/switch.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: switch.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar uso de switch/case em JavaScript 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | const status = 500; 9 | 10 | switch (status) { 11 | case 200: 12 | console.log("OK!"); 13 | break; 14 | case 400: // or 15 | case 500: // or 16 | console.log("Error!"); 17 | break; 18 | default: 19 | // else 20 | console.log("Unknown status"); 21 | break; 22 | } 23 | -------------------------------------------------------------------------------- /12-arrays/README.md: -------------------------------------------------------------------------------- 1 | # Arrays 2 | 3 | Os arrays fornecem a capacidade de reunir uma lista de itens. Você pode adicionar e remover itens, modificar itens individuais ou até mesmo fazer um loop por todos eles. 4 | 5 | ## Leituras Adicionais 6 | 7 | - [Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array) 8 | -------------------------------------------------------------------------------- /12-arrays/array_methods.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: array_methods.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar uso arrays em JavaScript 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | let arr1 = ["A", true, 2]; 9 | 10 | //Push and pop 11 | console.log("\n********Push and pop********\n"); 12 | console.log(arr1.push("new value")); 13 | console.log(arr1); 14 | console.log(arr1.pop()); //Remove last value 15 | console.log(arr1); 16 | 17 | //Shift and unshift 18 | console.log("\n********Shift and unshift********\n"); 19 | console.log(arr1.unshift("new value")); 20 | console.log(arr1); 21 | console.log(arr1.shift()); //Remove first value 22 | console.log(arr1); 23 | 24 | //Concat 25 | console.log("\n********Concat********\n"); 26 | let arr2 = ["B", false, 3]; 27 | let newArr = arr1.concat(arr2); 28 | let newArr2 = arr2.concat([1, 2, 3]); 29 | console.log(newArr); 30 | console.log(newArr2); 31 | -------------------------------------------------------------------------------- /12-arrays/create_arrays.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: create_arrays.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar uso arrays em JavaScript 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | //Creating an array 9 | console.log("\n********Creating an array********\n"); 10 | 11 | let arrayLength = 5; 12 | let arr1 = []; 13 | let arr2 = Array(arrayLength); 14 | 15 | //Getting array length 16 | console.log("\n********Getting array length********\n"); 17 | 18 | console.log(arr1.length); 19 | console.log(arr2.length); 20 | -------------------------------------------------------------------------------- /12-arrays/populating_arrays.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: populating_arrays.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar uso arrays em JavaScript 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | //Adding data during creation 9 | console.log("\n********Adding data during creation********\n"); 10 | let arr1 = ["A", true, 2]; 11 | console.log(arr1[0]); 12 | console.log(arr1[1]); 13 | 14 | //Adding data after creation 15 | console.log("\n********Adding data after creation********\n"); 16 | let arrayLength = 2; 17 | let arr2 = Array(arrayLength); 18 | arr2[0] = "Value at index 0"; 19 | console.log(arr2[0]); 20 | console.log(arr2[1]); //No value present at index 21 | 22 | //Length and index 23 | console.log("\n********Length and index********\n"); 24 | 25 | console.log(arr1.length); 26 | console.log(arr1[3]); //Doesn't exist 27 | console.log(arr1[2]); //Last index of array 28 | console.log(arr1[arr1.length - 1]); //Equals 2 29 | 30 | console.log("\n********Length and index Part 2********\n"); 31 | let arr3 = Array(3); //Empty array of length 3 32 | arr3[2] = "Adding a value!"; 33 | console.log(arr3[2]); //Last index of array 34 | console.log(arr3[arr3.length - 1]); //Index: 2 35 | console.log(arr3[0]); //No value yet 36 | console.log(arr3[1]); //No value yet 37 | -------------------------------------------------------------------------------- /13-lacos/README.md: -------------------------------------------------------------------------------- 1 | # Laços 2 | 3 | JavaScript oferece várias maneiras de executar código várias vezes e agir sobre coleções de dados. Felizmente, existem três principais que irão atendê-lo bem e cobrir quase todas as situações que você encontrar: ``for`, `for of` e `while`. 4 | 5 | ## Leituras Adicionais 6 | 7 | - [for](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for) 8 | - [for of](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of) 9 | - [while](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/while) 10 | -------------------------------------------------------------------------------- /13-lacos/demo.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: demo.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar uso de laços em JavaScript 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | const names = ["Justin", "Sarah", "Christopher"]; 9 | 10 | // while loop 11 | console.log("-- while --"); 12 | let index = 0; 13 | while (index < names.length) { 14 | const name = names[index]; 15 | console.log(name); 16 | index++; 17 | } 18 | 19 | // for loop 20 | console.log("-- for --"); 21 | for (let index = 0; index < names.length; index++) { 22 | const name = names[index]; 23 | console.log(name); 24 | } 25 | 26 | // for of 27 | console.log("-- for of --"); 28 | for (let name of names) { 29 | console.log(name); 30 | } 31 | -------------------------------------------------------------------------------- /14-funcoes/1-functions.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: 1-functions.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar uso funções em JavaScript 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | // 1. Function Definition 9 | function printHello(name) { 10 | console.log("Hello " + name); 11 | return "name " + " hello!"; 12 | } 13 | //console.log(typeof printHello); 14 | 15 | // 2. Function Invocation 16 | let result = printHello("Microsoft !"); 17 | console.log(result); 18 | 19 | // 3. Function Naming 20 | 21 | // 4. Function Parameters 22 | 23 | // 5. Function Return 24 | -------------------------------------------------------------------------------- /14-funcoes/README.md: -------------------------------------------------------------------------------- 1 | # Funções 2 | 3 | Funções ou métodos permitem que você crie blocos de código reutilizável. O uso de funções torna seu código mais modular e fácil de ler. Não tenha medo de adicionar funções para quebrar seu código em partes lógicas. 4 | 5 | ## Leituras Adicionais 6 | 7 | - [Functions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions) 8 | -------------------------------------------------------------------------------- /14-funcoes/functions-demo.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: functions-demo.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar uso funções em JavaScript 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | // 1. Function Definition 9 | function printHello(name) { 10 | console.log("Hello " + name); 11 | return "name " + " hello!"; 12 | } 13 | 14 | // 2. Function Invocation 15 | let result = printHello("Microsoft !"); 16 | console.log(result); 17 | 18 | // 3. Function Naming 19 | 20 | // 4. Function Parameters 21 | 22 | // 5. Function Return 23 | 24 | /** 25 | // Step 1: Define function 26 | function printHello(){ 27 | // execution 28 | console.log("Hello world!") 29 | } 30 | console.log(typeof printHello); 31 | 32 | // Step 2: Invoke it 33 | printHello() 34 | 35 | // Step 3: Explore valid and invalid function names 36 | print$ello(); // invalid: gives editor error 37 | function print-Hello(){ } // invalid: gives editor error 38 | 39 | // Step 4: Modify printHello code 40 | function printHello(name){ 41 | console.log("Hello"+name); 42 | } 43 | 44 | printHello("Microsoft"); 45 | 46 | // Step 5: Invoke it with no arguments - what happens? 47 | // Show output undefined 48 | 49 | // Step 6: What if you had more than required number of args? 50 | // Show that it ignores extra arguments 51 | printHello("Microsoft ", "!!"); 52 | 53 | // Step 7: Look at type of returned results 54 | let result = printHello("Microsoft !"); 55 | console.log(result); 56 | 57 | // Final state of code is above 58 | */ 59 | -------------------------------------------------------------------------------- /15-arrow-functions/README.md: -------------------------------------------------------------------------------- 1 | # Arrow functions 2 | 3 | Funções anônimas, que às vezes são chamadas de funções de seta, permitem que você crie funções sem um nome. Isso pode ser útil ao usar retornos de chamada e promessas, que são comuns em JavaScript. 4 | 5 | ## Leituras Adicionais 6 | 7 | - [Funções](https://developer.mozilla.org/en-US/docs/Glossary/Function) 8 | -------------------------------------------------------------------------------- /15-arrow-functions/demo.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: 1-functions.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar uso de arrow functions em JavaScript 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | const add = (a, b) => a + b; 9 | console.log(add(1, 2)); 10 | 11 | const subtract = (a, b) => { 12 | const result = a - b; 13 | return result; 14 | }; 15 | console.log(subtract(1, 1)); 16 | -------------------------------------------------------------------------------- /16-objetos-json/README.md: -------------------------------------------------------------------------------- 1 | # Objetos e JSON 2 | 3 | Os objetos permitem que você crie tipos de dados complexos. Devido à flexibilidade do JavaScript, você pode criá-los rapidamente por meio do JavaScript Object Notation ou JSON. 4 | 5 | ## Leituras Adicionais 6 | 7 | - [Objetos](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object) 8 | - [JSON](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON) 9 | -------------------------------------------------------------------------------- /16-objetos-json/json-demo.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: json-demo.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar uso de JSON. 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | // Think of a simple JavaScript object with data (property values) 9 | const book = new Object({ title: "1984", author: "George Orwell" }); 10 | console.log("\n -------- "); 11 | console.log(typeof book); 12 | console.log(book); 13 | 14 | // You can also have a collection of these objects 15 | const myBooks = [ 16 | new Object({ title: "1984", author: "George Orwell" }), 17 | new Object({ title: "Becoming", author: "Michelle Obama" }), 18 | new Object({ title: "Snow Crash", author: "Neal Stephenson" }), 19 | new Object({ title: "Predictably Irrational", author: "Dan Ariely" }), 20 | ]; 21 | console.log("\n -------- "); 22 | console.log(typeof myBooks); 23 | console.log(myBooks); 24 | 25 | // What if you had a Library service that you need to send the 26 | // data to - e.g., myBooks is the list of books being checked out 27 | // 28 | // Or you want to store the data to a remote database, or to the 29 | // local filesystem - many networking and file transfer protocols 30 | // rely on simple text formats for request/response 31 | // 32 | // JSON = JavaScript Object Notation 33 | // Convert JavaScript objects and arrays 34 | // to/from text (string) format 35 | 36 | // JSON.stringify - object input 37 | console.log("\n -------- "); 38 | let bookJSON = JSON.stringify(book); 39 | console.log(typeof bookJSON); 40 | console.log(bookJSON); 41 | 42 | // JSON.stringify - collection input 43 | console.log("\n -------- "); 44 | let myBooksJSON = JSON.stringify(myBooks); 45 | console.log(myBooksJSON); 46 | 47 | // JSON.parse - string input 48 | let data = bookJSON; 49 | let parsed = JSON.parse(data); 50 | console.log("\n -------- "); 51 | console.log(parsed); 52 | console.log(Array.isArray(parsed)); 53 | console.log("Num items: " + parsed.length); 54 | 55 | // JSON.parse - string input 56 | data = myBooksJSON; 57 | parsed = JSON.parse(data); 58 | console.log("\n -------- "); 59 | console.log(parsed); 60 | console.log(Array.isArray(parsed)); 61 | console.log("Num items: " + parsed.length); 62 | console.log("Author of 2nd book: " + parsed[1].author); 63 | -------------------------------------------------------------------------------- /16-objetos-json/objects-demo.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: objects-demo.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar uso de JSON. 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | /* START */ 9 | 10 | // How can you represent real-world objects in code? 11 | // They have associated attributes = object PROPERTIES 12 | // They have associated actions = object METHODS 13 | // They have associated context = "this" 14 | 15 | /* 16 | // First: 17 | // Let's define a simple object (with no properties or methods) 18 | const blank = {}; 19 | console.log("Blank type:",typeof blank); 20 | console.log("Blank value",blank); 21 | */ 22 | 23 | /* 24 | // Next: 25 | // Let's define an object with PROPERTIES (attributes) 26 | // Objects are just a collection of name-value pairs 27 | // separated by commas 28 | const book = { 29 | title : "1984", 30 | author: "George Orwell", 31 | isAvailable: false 32 | }; 33 | console.log("Book type:",typeof book); 34 | console.log("Book value:\n",book); 35 | */ 36 | 37 | /* 38 | 39 | // Next: 40 | // Let's add actions we can take on it 41 | // Note that these are properties too - defined as functions 42 | const book = { 43 | title : "1984", 44 | author: "George Orwell", 45 | isAvailable: false, 46 | checkIn: function(){ this.isAvailable = true; }, 47 | checkOut: function(){ this.isAvailable = false; } 48 | }; 49 | console.log("Book type:",typeof book); 50 | console.log("Book value:\n",book); 51 | */ 52 | 53 | // Next: 54 | // We created objects above using OBJECT LITERALS 55 | // (it is literally defined and created at once) 56 | // Now we can look at using CONSTRUCTORS 57 | // Constructors are like "templates" for an object 58 | // - they explain HOW the object is created 59 | // - to actually create an instance use "new" 60 | // 61 | // We'll look at using a base constructor called .. 62 | // Object 63 | 64 | /* 65 | const book = new Object(); 66 | console.log("\n--- Define book"); 67 | console.log("Book type:",typeof book); 68 | console.log("Book value:\n",book); 69 | */ 70 | 71 | /* 72 | const data = {title:"1984",author:"George Orwell"}; 73 | const book1 = new Object(data); 74 | console.log("\n--- Define book1 with data"); 75 | console.log("Book1 type:",typeof book1); 76 | console.log("Book1 value:\n",book1); 77 | */ 78 | 79 | const dataFunc = { 80 | title: "1984", 81 | author: "George Orwell", 82 | isAvailable: true, 83 | checkIn: function () { 84 | this.isAvailable = true; 85 | }, 86 | checkOut: function () { 87 | this.isAvailable = false; 88 | }, 89 | }; 90 | const book2 = new Object(dataFunc); 91 | console.log("\n--- Define book2 with data and functions"); 92 | console.log("Book2 type:", typeof book2); 93 | console.log("Book2 value:\n", book2); 94 | 95 | // Next: 96 | // Let's talk about PROPERTIES and METHODS 97 | // How to accesss them 98 | // How to use them 99 | 100 | /* 101 | // Dot Notation 102 | console.log(book2.author); 103 | book2.author="G. Orwell"; 104 | console.log(book2); 105 | 106 | // Brackets Notation 107 | console.log(book2["author"]); 108 | book2["author"]="G. Orwell"; 109 | console.log(book2); 110 | 111 | 112 | // Dot Notation 113 | console.log(book2.isAvailable); 114 | book2.checkOut(); 115 | console.log(book2); 116 | 117 | // bracket Notation 118 | console.log(book2.isAvailable); 119 | book2["checkOut"](); 120 | console.log(book2); 121 | 122 | */ 123 | 124 | // Last: 125 | // Let's talk about "this" 126 | 127 | const bookObj = { 128 | checkIn: function () { 129 | return this; 130 | }, 131 | }; 132 | console.log("\n\nthis is: ", bookObj.checkIn()); 133 | console.log(bookObj.checkIn() === bookObj); 134 | 135 | function anotherCheckIn() { 136 | return this; 137 | } 138 | console.log("\n\nthis is: ", anotherCheckIn()); 139 | console.log(anotherCheckIn() === globalThis); 140 | 141 | /* END */ 142 | -------------------------------------------------------------------------------- /17-promises-async/README.md: -------------------------------------------------------------------------------- 1 | # Código Assíncrono 2 | 3 | O desenvolvimento de aplicativos modernos envolve a comunicação com outros sistemas. Essas comunicações podem levar algum tempo e podem fazer com que seu aplicativo pare e não consiga realizar outras operações. 4 | 5 | JavaScript é capaz de gerenciar operações de longa duração por meio do uso de promises. Uma promessa é semelhante a um [IOU](https://wikipedia.org/wiki/IOU);; o código promete que avisará quando for concluído e executará a função fornecida. Você pode usar promises diretamente para especificar como deseja que seu código responda quando uma chamada para um sistema remoto retornar. 6 | 7 | Recentemente, surgiu um novo padrão. Com base em promises, `async`/`await` permite que você crie um código que parece síncrono, mas é assíncrono. Isso ajuda a tornar o código mais legível ao mesmo tempo que permite um melhor desempenho. 8 | 9 | ## Leituras Adicionais 10 | 11 | - [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) 12 | - [async](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function) 13 | - [await](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await) 14 | -------------------------------------------------------------------------------- /17-promises-async/async-await.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: async-await.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar uso de async/await. 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | function promiseTimeout(ms) { 9 | return new Promise((resolve, reject) => { 10 | setTimeout(resolve, ms); 11 | }); 12 | } 13 | 14 | async function longRunningOperation() { 15 | // logic 16 | return 42; 17 | } 18 | 19 | async function run() { 20 | // logic 21 | console.log("Start!!"); 22 | await promiseTimeout(2000); 23 | 24 | const response = await longRunningOperation(); 25 | console.log(response); 26 | 27 | console.log("Stop!!"); 28 | } 29 | 30 | run(); 31 | -------------------------------------------------------------------------------- /17-promises-async/promise-demo.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: promise-demo.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar uso de async/await. 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | function promiseTimeout(ms) { 9 | return new Promise((resolve, reject) => { 10 | setTimeout(resolve, ms); 11 | }); 12 | } 13 | 14 | promiseTimeout(2000) 15 | .then(() => { 16 | console.log("Done!!"); 17 | return promiseTimeout(1000); 18 | }) 19 | .then(() => { 20 | console.log("Also done!!"); 21 | return Promise.resolve(42); 22 | }) 23 | .then((result) => { 24 | console.log(result); 25 | }) 26 | .catch(() => { 27 | console.log("Error!"); 28 | }); 29 | -------------------------------------------------------------------------------- /18-packages/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .env -------------------------------------------------------------------------------- /18-packages/README.md: -------------------------------------------------------------------------------- 1 | # Packages (Pacotes) 2 | 3 | Os pacotes podem ser considerados plug-ins para o seu código. Às vezes chamados de bibliotecas ou módulos, os pacotes oferecem um conjunto definido de funcionalidades que você pode importar para o seu aplicativo. Você descobrirá que é quase impossível criar um aplicativo que não use vários pacotes. 4 | 5 | Usando o **npm** (Node Package Manager), você pode acessar um mundo inteiro de ferramentas e recursos. Se você está tentando implementar serviços comuns, como criar um aplicativo da web, gerenciar segredos, chamar recursos externos ou incorporar inteligência artificial, é provável que haja um pacote disponível para atender às suas necessidades. 6 | 7 | ## Leituras Adicionais 8 | 9 | - [npm](https://www.npmjs.com/) 10 | - [dotenv](https://www.npmjs.com/package/dotenv) 11 | - [express](http://expressjs.com/) 12 | - [Bot Framework](https://docs.microsoft.com/azure/bot-service/bot-service-overview-introduction?view=azure-bot-service-4.0&WT.mc_id=javascript-34431-gllemos) 13 | - [JavaScript Azure Cognitive Services modules](https://docs.microsoft.com/javascript/api/overview/azure/cognitive-services?view=azure-node-latest&WT.mc_id=javascript-34431-gllemos) 14 | -------------------------------------------------------------------------------- /18-packages/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * file: index.js 3 | * data: 10/07/2021 4 | * description: arquivo responsável para ensinar uso de async/await. 5 | * author: Glaucia Lemos 6 | */ 7 | 8 | require('dotenv').config(); 9 | 10 | const express = require('express'); 11 | const app = express(); 12 | const port = process.env.PORT || 3000; 13 | 14 | app.get('/', (req, res) => { 15 | res.send('Hello World!'); 16 | }); 17 | 18 | app.listen(port, () => { 19 | console.log('Example app listening at http://localhost:3000'); 20 | }); 21 | -------------------------------------------------------------------------------- /18-packages/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "js-101", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "accepts": { 8 | "version": "1.3.7", 9 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", 10 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", 11 | "requires": { 12 | "mime-types": "~2.1.24", 13 | "negotiator": "0.6.2" 14 | } 15 | }, 16 | "array-flatten": { 17 | "version": "1.1.1", 18 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 19 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 20 | }, 21 | "body-parser": { 22 | "version": "1.19.0", 23 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", 24 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", 25 | "requires": { 26 | "bytes": "3.1.0", 27 | "content-type": "~1.0.4", 28 | "debug": "2.6.9", 29 | "depd": "~1.1.2", 30 | "http-errors": "1.7.2", 31 | "iconv-lite": "0.4.24", 32 | "on-finished": "~2.3.0", 33 | "qs": "6.7.0", 34 | "raw-body": "2.4.0", 35 | "type-is": "~1.6.17" 36 | } 37 | }, 38 | "bytes": { 39 | "version": "3.1.0", 40 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", 41 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" 42 | }, 43 | "content-disposition": { 44 | "version": "0.5.3", 45 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", 46 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", 47 | "requires": { 48 | "safe-buffer": "5.1.2" 49 | } 50 | }, 51 | "content-type": { 52 | "version": "1.0.4", 53 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 54 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 55 | }, 56 | "cookie": { 57 | "version": "0.4.0", 58 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", 59 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" 60 | }, 61 | "cookie-signature": { 62 | "version": "1.0.6", 63 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 64 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 65 | }, 66 | "debug": { 67 | "version": "2.6.9", 68 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 69 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 70 | "requires": { 71 | "ms": "2.0.0" 72 | } 73 | }, 74 | "depd": { 75 | "version": "1.1.2", 76 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 77 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 78 | }, 79 | "destroy": { 80 | "version": "1.0.4", 81 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 82 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 83 | }, 84 | "dotenv": { 85 | "version": "8.2.0", 86 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", 87 | "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" 88 | }, 89 | "ee-first": { 90 | "version": "1.1.1", 91 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 92 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 93 | }, 94 | "encodeurl": { 95 | "version": "1.0.2", 96 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 97 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 98 | }, 99 | "escape-html": { 100 | "version": "1.0.3", 101 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 102 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 103 | }, 104 | "etag": { 105 | "version": "1.8.1", 106 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 107 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 108 | }, 109 | "express": { 110 | "version": "4.17.1", 111 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", 112 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", 113 | "requires": { 114 | "accepts": "~1.3.7", 115 | "array-flatten": "1.1.1", 116 | "body-parser": "1.19.0", 117 | "content-disposition": "0.5.3", 118 | "content-type": "~1.0.4", 119 | "cookie": "0.4.0", 120 | "cookie-signature": "1.0.6", 121 | "debug": "2.6.9", 122 | "depd": "~1.1.2", 123 | "encodeurl": "~1.0.2", 124 | "escape-html": "~1.0.3", 125 | "etag": "~1.8.1", 126 | "finalhandler": "~1.1.2", 127 | "fresh": "0.5.2", 128 | "merge-descriptors": "1.0.1", 129 | "methods": "~1.1.2", 130 | "on-finished": "~2.3.0", 131 | "parseurl": "~1.3.3", 132 | "path-to-regexp": "0.1.7", 133 | "proxy-addr": "~2.0.5", 134 | "qs": "6.7.0", 135 | "range-parser": "~1.2.1", 136 | "safe-buffer": "5.1.2", 137 | "send": "0.17.1", 138 | "serve-static": "1.14.1", 139 | "setprototypeof": "1.1.1", 140 | "statuses": "~1.5.0", 141 | "type-is": "~1.6.18", 142 | "utils-merge": "1.0.1", 143 | "vary": "~1.1.2" 144 | } 145 | }, 146 | "finalhandler": { 147 | "version": "1.1.2", 148 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", 149 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", 150 | "requires": { 151 | "debug": "2.6.9", 152 | "encodeurl": "~1.0.2", 153 | "escape-html": "~1.0.3", 154 | "on-finished": "~2.3.0", 155 | "parseurl": "~1.3.3", 156 | "statuses": "~1.5.0", 157 | "unpipe": "~1.0.0" 158 | } 159 | }, 160 | "forwarded": { 161 | "version": "0.1.2", 162 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 163 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 164 | }, 165 | "fresh": { 166 | "version": "0.5.2", 167 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 168 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 169 | }, 170 | "http-errors": { 171 | "version": "1.7.2", 172 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", 173 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", 174 | "requires": { 175 | "depd": "~1.1.2", 176 | "inherits": "2.0.3", 177 | "setprototypeof": "1.1.1", 178 | "statuses": ">= 1.5.0 < 2", 179 | "toidentifier": "1.0.0" 180 | } 181 | }, 182 | "iconv-lite": { 183 | "version": "0.4.24", 184 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 185 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 186 | "requires": { 187 | "safer-buffer": ">= 2.1.2 < 3" 188 | } 189 | }, 190 | "inherits": { 191 | "version": "2.0.3", 192 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 193 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 194 | }, 195 | "ipaddr.js": { 196 | "version": "1.9.1", 197 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 198 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 199 | }, 200 | "media-typer": { 201 | "version": "0.3.0", 202 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 203 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 204 | }, 205 | "merge-descriptors": { 206 | "version": "1.0.1", 207 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 208 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 209 | }, 210 | "methods": { 211 | "version": "1.1.2", 212 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 213 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 214 | }, 215 | "mime": { 216 | "version": "1.6.0", 217 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 218 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 219 | }, 220 | "mime-db": { 221 | "version": "1.44.0", 222 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", 223 | "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" 224 | }, 225 | "mime-types": { 226 | "version": "2.1.27", 227 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", 228 | "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", 229 | "requires": { 230 | "mime-db": "1.44.0" 231 | } 232 | }, 233 | "ms": { 234 | "version": "2.0.0", 235 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 236 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 237 | }, 238 | "negotiator": { 239 | "version": "0.6.2", 240 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", 241 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" 242 | }, 243 | "on-finished": { 244 | "version": "2.3.0", 245 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 246 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 247 | "requires": { 248 | "ee-first": "1.1.1" 249 | } 250 | }, 251 | "parseurl": { 252 | "version": "1.3.3", 253 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 254 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 255 | }, 256 | "path-to-regexp": { 257 | "version": "0.1.7", 258 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 259 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 260 | }, 261 | "prettier": { 262 | "version": "2.1.2", 263 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.2.tgz", 264 | "integrity": "sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==", 265 | "dev": true 266 | }, 267 | "proxy-addr": { 268 | "version": "2.0.6", 269 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", 270 | "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", 271 | "requires": { 272 | "forwarded": "~0.1.2", 273 | "ipaddr.js": "1.9.1" 274 | } 275 | }, 276 | "qs": { 277 | "version": "6.7.0", 278 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", 279 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" 280 | }, 281 | "range-parser": { 282 | "version": "1.2.1", 283 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 284 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 285 | }, 286 | "raw-body": { 287 | "version": "2.4.0", 288 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", 289 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", 290 | "requires": { 291 | "bytes": "3.1.0", 292 | "http-errors": "1.7.2", 293 | "iconv-lite": "0.4.24", 294 | "unpipe": "1.0.0" 295 | } 296 | }, 297 | "safe-buffer": { 298 | "version": "5.1.2", 299 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 300 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 301 | }, 302 | "safer-buffer": { 303 | "version": "2.1.2", 304 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 305 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 306 | }, 307 | "send": { 308 | "version": "0.17.1", 309 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", 310 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", 311 | "requires": { 312 | "debug": "2.6.9", 313 | "depd": "~1.1.2", 314 | "destroy": "~1.0.4", 315 | "encodeurl": "~1.0.2", 316 | "escape-html": "~1.0.3", 317 | "etag": "~1.8.1", 318 | "fresh": "0.5.2", 319 | "http-errors": "~1.7.2", 320 | "mime": "1.6.0", 321 | "ms": "2.1.1", 322 | "on-finished": "~2.3.0", 323 | "range-parser": "~1.2.1", 324 | "statuses": "~1.5.0" 325 | }, 326 | "dependencies": { 327 | "ms": { 328 | "version": "2.1.1", 329 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 330 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" 331 | } 332 | } 333 | }, 334 | "serve-static": { 335 | "version": "1.14.1", 336 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", 337 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", 338 | "requires": { 339 | "encodeurl": "~1.0.2", 340 | "escape-html": "~1.0.3", 341 | "parseurl": "~1.3.3", 342 | "send": "0.17.1" 343 | } 344 | }, 345 | "setprototypeof": { 346 | "version": "1.1.1", 347 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 348 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" 349 | }, 350 | "statuses": { 351 | "version": "1.5.0", 352 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 353 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 354 | }, 355 | "toidentifier": { 356 | "version": "1.0.0", 357 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 358 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" 359 | }, 360 | "type-is": { 361 | "version": "1.6.18", 362 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 363 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 364 | "requires": { 365 | "media-typer": "0.3.0", 366 | "mime-types": "~2.1.24" 367 | } 368 | }, 369 | "unpipe": { 370 | "version": "1.0.0", 371 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 372 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 373 | }, 374 | "utils-merge": { 375 | "version": "1.0.1", 376 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 377 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 378 | }, 379 | "vary": { 380 | "version": "1.1.2", 381 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 382 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 383 | } 384 | } 385 | } 386 | -------------------------------------------------------------------------------- /18-packages/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "js-101", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "node index.js", 8 | "format": "prettier --write *.js" 9 | }, 10 | "keywords": [], 11 | "author": "", 12 | "license": "MIT", 13 | "dependencies": { 14 | "dotenv": "^8.2.0", 15 | "express": "^4.17.1" 16 | }, 17 | "devDependencies": { 18 | "prettier": "^2.1.2" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Microsoft Open Source Code of Conduct 2 | 3 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). 4 | 5 | Resources: 6 | 7 | - [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) 8 | - [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) 9 | - Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Série de Vídeos para Iniciantes em JavaScript 2 | 3 | [![C-pia-de-Tutorial-Node-js-Express-com-Docker-1.png](https://i.postimg.cc/63Ws792X/C-pia-de-Tutorial-Node-js-Express-com-Docker-1.png)](https://postimg.cc/rdPZ32Nn) 4 | 5 | Uma série de vídeos ensinando conceitos Básicos a Intermediários da linguagem mais usada do planeta: JavaScript! 6 | 7 | Se você nunca teve contato com a Linguagem e deseja aprender, essa série é para você! E, se você é uma Pessoa Desenvolvedora que já conhece a linguagem, mas gostaria de rever alguns conceitos pontuais, essa série também é para você! 8 | 9 | Nosso objetivo é ajudar a mostrar os conceitos suficientes sobre JavaScript para fornecer a base necessária para começar a trabalhar com tutoriais focados em frameworks e SDKs usando JavaScript. 10 | 11 | Aqui estaremos te ensinando toda a sintaxe relacionada a JavaScript! Como por exemplo: funções, loops, variáveis lógica booleana e tantos outros tópicos abordados! 12 | 13 | Durante essa série, estaremos usando o Node.js para executar os códigos criados durante a série em vez de usar o navegador. Embora quase todo o código que usamos funcione em ambos os locais, todas as demos serão executadas a partir do console usando Node.js. 14 | 15 | Mas, se desejar, poderão usar extensões que facilitam a execução desses códigos no **[Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=javascript-34431-gllemos)** tais como: **[Extensão Visual Studio Code - Code Runner](https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner&WT.mc_id=javascript-34431-gllemos)** 16 | 17 | Toda a série está linkada com o novo Learn Path do Curso Grátis do Microsoft Learn de: **[Desenvolvimento para a Web para iniciantes](https://docs.microsoft.com/learn/paths/web-development-101/?WT.mc_id=javascript-34431-gllemos)** 18 | 19 | Espero que todas as pessoas, sejam Pessoas Desenvolvedoras ou não, apreciem essa série que foi criada com muito ❤️ para todos vocês! 20 | 21 | ``` 22 | ❤️ 'Desenvolvido pela Comunidade para a Comunidade!' ❤️ 23 | ``` 24 | 25 | ## 🏃 Colaboradores 26 | 27 | Todo o projeto foi elaborado por mim, em conjunto com os demais **[Cloud Advocates da Microsoft](https://developer.microsoft.com/en-us/advocates/)**. 28 | 29 | A versão em Português, foram gravadas com as respectivas Pessoas Desenvolvedoras da Comunidade Técnica Brasileira: 30 | 31 | - **[Glaucia Lemos - Cloud Advocate JavaScript | Microsoft](https://twitter.com/glaucia_lemos86)** 32 | - **[Italo José - Software Developer | Microsoft MVP](https://twitter.com/italojs_)** 33 | - **[Diego Telles - Software Engineer | Microsoft MSLA](https://twitter.com/UnicornCoder)** 34 | 35 | ## 🚀 Recursos Utilizados 36 | 37 | - **[Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=javascript-34431-gllemos)** 38 | - **[Extensão Visual Studio Code - Code Runner](https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner&WT.mc_id=javascript-34431-gllemos)** 39 | - **[Extensão Visual Studio Code - ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint&WT.mc_id=javascript-34431-gllemos)** 40 | - **[Extensão Visual Studio Code - Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode&WT.mc_id=javascript-34431-gllemos)** 41 | - **[Extensão Visual Studio Code - ES6 Code Snippets](https://marketplace.visualstudio.com/items?itemName=xabikos.JavaScriptSnippets&WT.mc_id=javascript-34431-gllemos)** 42 | - **[Node.js](https://nodejs.orgs)** 43 | - **[Repositório do NVM](https://github.com/nvm-sh/nvm)** 44 | - **[Repositório do nvm-windows](https://github.com/coreybutler/)** 45 | 46 | ## 📺 Série de Vídeos 47 | 48 | Abaixo vocês podem seguir de maneira ordenada todos os vídeos da série de JavaScript para Iniciantes através do meu **[Canal do Youtube](https://bit.ly/youtube-canal-glaucialemos)**! 49 | 50 | | Vídeo | Descrição | 51 | | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 52 | | **[Video 01 - O que é JavaScript?](https://youtu.be/SXBNpzjusgY)** | Nesse vídeo darei um overview do que aprenderemos durante essa série de Vídeos | 53 | | **[Video 02 - Executando JavaScript: no browser ou no servidor?](https://youtu.be/Tuwo8OeDsz0)** | Nesse vídeo vamos aprender como podemos executar o JavaScript. No browser? Ou no Servidor? | 54 | | **[Video 03 - Configurando sua caixa de ferramentas](https://youtu.be/bynF1E0Hq98)** | Nesse vídeo vamos configurar o nosso ambiente de desenvolvimento para realizarmos as demos que serão realizadas durante essa série | 55 | | **[Video 04 - Criando a sua Primeira Aplicação em JavaScript](https://youtu.be/e5cEpHibGdA)** | Nesse vídeo criaremos a nossa primeira aplicação em JavaScript, porém usando o Node.js! | 56 | | **[Video 05 - Comentários](https://youtu.be/CPPACskCnRo)** | Nesse vídeo aprenderemos a importância do uso de comentários em JavaScript | 57 | | **[Video 06 - Demo: Comentários](https://youtu.be/1RJbhJuxCNc)** | Nesse vídeo realizaremos algumas demonstrações em códigos bem simples de como podemos fazer uso de comentários em JavaScript | 58 | | **[Video 07 - Declarando Variáveis](https://youtu.be/u_aLTZHsclg)** | Nesse vídeo aprenderemos algo que é muito importante em qualquer linguagem de programação: declaração de variáveis! | 59 | | **[Video 08 - Demo: Declarando Variáveis](https://youtu.be/PzylgoSZIfI)** | Nesse vídeo realizaremos algumas demonstrações em códigos de como podemos fazer declaração de variáveis em JavaScript | 60 | | **[Video 09 - Trabalhando com Strings](https://youtu.be/L1Iq19bNN5U)** | Nesse vídeo vamos entender um pouco mais como podemos trabalhar com Strings em JavaScript | 61 | | **[Video 10 - Demo: Trabalhando com Strings](https://youtu.be/geIMjG60pvw)** | Nesse vídeo realizaremos algumas demonstrações em códigos de como podemos trabalhar com Strings em JavaScript | 62 | | **[Video 11 - Usando Template Literals para formatar Strings](https://youtu.be/T_e6pdTaOX8)** | Nesse vídeo vamos aprender a como podemos fazer uso de um recurso que nos auxilia e muito quando precisamos usar strings mais complexas: Template Literals | 63 | | **[Video 12 - Demo: Usando Template Literals para formatar Strings](https://youtu.be/-CQxhCCKhKo)** | Nesse vídeo realizaremos algumas demonstrações em códigos de como podemos trabalhar com Template Literals em JavaScript | 64 | | **[Video 13 - Tipos de Dados em JavaScript](https://youtu.be/ylaZV-UKTe4)** | Nesse vídeo vamos aprender os diferentes tipos de dados que podemos trabalhar com JavaScript | 65 | | **[Video 14 - Demo: Tipos de Dados em JavaScript](https://youtu.be/qJgURXHrPH0)** | Nesse vídeo realizaremos algumas demonstrações em códigos de como podemos trabalhar com diferentes tipos de dados com JavaScript | 66 | | **[Video 15 - Matemática em JavaScript](https://youtu.be/yyhc8Ub3WzU)** | Nesse vídeo vamos aprender a como realizar as principais operações matemáticas com JavaScript | 67 | | **[Video 16 - Demo: Matemática em JavaScript](https://youtu.be/HTtGTBxuCE8)** | Nesse vídeo realizaremos algumas demonstrações em códigos de como podemos trabalhar com diferentes tipos de operadores matemáticos com JavaScript | 68 | | **[Video 17 - Convertendo strings para números](https://youtu.be/tfzXDn1EsgU)** | Nesse vídeo vamos aprender a como podemos fazer conversão de dados de string para numérico em JavaScript | 69 | | **[Video 18 - Demo: Convertendo strings para números](https://youtu.be/XhzaY_TCW1w)** | Nesse vídeo realizaremos algumas demonstrações em códigos de como podemos trabalhar com conversão de Strings para Numericos em JavaScript | 70 | | **[Video 19 - Tratamento de Erros com Try/Catch/Finally](https://youtu.be/iFXMmBexfN0)** | Nesse vídeo aprenderemos como lidar com erros na execução dos códigos fazendo uso do famoso: try/catch/finally em JavaScript | 71 | | **[Video 20 - Demo: Tratamento de Erros com Try/Catch/Finally](https://youtu.be/ExgUZNqnAPA)** | Nesse vídeo realizaremos algumas demonstrações em códigos de como podemos trabalhar com tratamentos de erros (try/catch/finally) em JavaScript | 72 | | **[Video 21 - Datas](https://youtu.be/2Sknk70N4HI)** | Nesse vídeo vamos aprender um pouco mais como podemos trabalhar com Datas em JavaScript | 73 | | **[Video 22 - Demo: Datas](https://youtu.be/XRSyajanRLw)** | Nesse vídeo realizaremos algumas demonstrações em códigos de como podemos trabalhar com Datas em JavaScript | 74 | | **[Video 23 - Lógica booleana com instruções if](https://youtu.be/jqxfynLcNIw)** | Nesse vídeo aprederemos o laço de decisão mais importante e usado em qualquer linguagem de programação: 'If'. Porém aprenderemos alguns conceitos teóricos para entendermos melhor esse laço e como podemos aplicar em JavaScript | 75 | | **[Video 24 - Demo: Lógica booleana com instruções if](https://youtu.be/eRKucfCP0_Q)** | Nesse vídeo realizaremos algumas demonstrações em códigos de como podemos trabalhar com laço de decisão 'If' em JavaScript | 76 | | **[Video 25 - Lógica booleana com switch e outras sintaxes](https://youtu.be/OyM1ksB4vdo)** | Nesse vídeo vamos aprender um outro laço, só que de decisão: 'switch/case' em JavaScript. | 77 | | **[Video 26 - Demo: Lógica booleana com switch e outras sintaxes](https://youtu.be/BT2zCoQeZt4)** | Nesse vídeo realizaremos algumas demonstrações em códigos de como podemos trabalhar com laço de decisão 'switch/case' em JavaScript. | 78 | | **[Video 27 - Criando Arrays](https://youtu.be/rlvD4Umw37U)** | Nesse vídeos vamos aprender um outro conceito extremamente importante nas linguagens de programação: Arrays! Aqui vamos aprender sobre Arrays com conceitos e explicações diretas em como podemos aplicar em JavaScript. | 79 | | **[Video 28 - Demo: Criando Arrays](https://youtu.be/cR0yZYJ3ePM)** | Nesse vídeo realizaremos algumas demonstrações em códigos de como podemos trabalhar com Arrays em JavaScript. | 80 | | **[Video 29 - Populando Arrays](https://youtu.be/iPPqIZTWKPU)** | Agora que já aprendemos como mexer com Arrays em JavaScript, chegou o momento de aprender a como podemos manipular os Arrays me JavaScript. | 81 | | **[Video 30 - Demo: Populando Arrays](https://youtu.be/yHaM3VuxXKg)** | Nesse vídeo realizaremos algumas demonstrações em códigos de como podemos manipular Arrays em JavaScript. | 82 | | **[Video 31 - Métodos de Arrays](https://youtu.be/Q-mHz5KxLG4)** | Nesse vídeos vamos aprender alguns importantes métodos de Arrays que podemos fazer uso em JavaScript | 83 | | **[Video 32 - Demo: Métodos de Arrays](https://youtu.be/NuhV9gaJI-Y)** | Nesse vídeo realizaremos algumas demonstrações em códigos de como podemos usar alguns importantes métodos de Arrays em JavaScript. | 84 | | **[Video 33 - Laços(Loops)](https://youtu.be/J2X-olc3Z6Y)** | Nesse vídeo vamos aprender outros importantes laços (loops) que podemos usar em JavaScript | 85 | | **[Video 34 - Demo: Laços(Loops)](https://youtu.be/BRjbyBaF8ko)** | Nesse vídeo realizaremos algumas demonstrações em códigos de como podemos fazer uso de Loops em JavaScript. | 86 | | **[Video 35 - Funções](https://youtu.be/aAfSVldL6Vk)** | Nesse vídeos vamos aprender sobre Funções. E, porque o uso delas é tão importante e como podemos fazer uso de Funções em JavaScript | 87 | | **[Video 36 - Demo: Funções](https://youtu.be/cS28BFVhgnI)** | Nesse vídeo realizaremos algumas demonstrações em códigos de como podemos fazer uso de Funções em JavaScript. | 88 | | **[Video 37 - Arrow Functions e Funções Anônimas](https://youtu.be/r3i-FlzU6DA)** | Nesse vídeo vamos aprender a como fazer uso de Funções Anônimas e Arrow Functions, algo tão utilizado no mundo do JavaScript | 89 | | **[Video 38 - Demo: Arrow Functions e Funções Anônimas](https://youtu.be/NtoaRRuwj3U)** | Nesse vídeo realizaremos algumas demonstrações em códigos de como podemos fazer uso de Funções Anônimas e Arrow Functions em JavaScript. | 90 | | **[Video 39 - JavaScript Object Notation (JSON)](https://youtu.be/ofwXIR_ItxY)** | Nesse vídeos vamos aprender conceitos importantes de como podemos manipular objetos usando o JSON (JavaScript Object Notation) | 91 | | **[Video 40 - Demo: JavaScript Object Notation (JSON)](https://youtu.be/BSnsfIzFwOI)** | Nesse vídeo realizaremos algumas demonstrações em códigos de como podemos fazer uso do JSON (JavaScript Object Notation) | 92 | | **[Video 41 - Objetos em JavaScript (JSON)](https://youtu.be/MGBHpBnL1TY)** | Dando continuidade com os estudos em relação a JSON, vamos aprender mais ainda conceitos de como podemos lidar com Objetos com JSON! | 93 | | **[Video 42 - Demo: Objetos em JavaScript (JSON)](https://youtu.be/Y9DC-v7D6aA)** | Nesse vídeo realizaremos algumas demonstrações em códigos de como podemos fazer uso de Objetos com JSON (JavaScript Object Notation) | 94 | | **[Video 43 - Promises para operações de longa duração](https://youtu.be/ai5G5gBPEWo)** | Nesse vídeo vamos aprender a como lidar com Promises e porque é o mais indicado para operações de funções de longa duração em JavaScript | 95 | | **[Video 44 - Demo: Promises para operações de longa duração](https://youtu.be/5yfX4F9_jOo)** | Nesse vídeo realizaremos algumas demonstrações em códigos de como podemos fazer uso de Promises em funções em JavaScript | 96 | | **[Video 45 - Gerenciando Promises com async/await](https://youtu.be/zdpfyYL5OZ4)** | Nesse vídeo aprenderemos como podemos gerenciar promises com async e await em funções com JavaScript | 97 | | **[Video 46 - Demo: Gerenciando Promises com async/await](https://youtu.be/p5BSkIopY8s)** | Nesse vídeo realizaremos algumas demonstrações em códigos de como podemos fazer uso de Funções Async/Await em JavaScript | 98 | | **[Video 47 - Gerenciamento de Pacotes (Packages)](https://youtu.be/DZh3P2B4U28)** | Nesse penúltimo vídeo vamos aprender algo que vai te ajudar a seguir adiante para aprender mais sobre JavaScript/Node.js: Packages. Como podemos fazer uso de diferentes pacotes em JavaScript/Node.js | 99 | | **[Video 48 - Demo: Gerenciamento de Pacotes (Packages)](https://youtu.be/AbRgNqJbJMs)** | Nesse vídeo realizaremos algumas demonstrações em códigos de como podemos fazer uso de Packages em JavaScript/Node.js | 100 | 101 | ## 🏃 Próximos Passos 102 | 103 | Abaixo você encontrará recursos para prosseguir seus estudos depois que concluir com sucesso a nossa série de vídeos: 104 | 105 | - ✅ **[Curso Grátis de Criando Aplicações JavaScript com Node.js](https://docs.microsoft.com/pt-br/learn/paths/build-javascript-applications-nodejs/?WT.mc_id=javascript-34431-gllemos)** 106 | - ✅ **[Curso Grátis de Vue.Js - Microsoft Learn](https://docs.microsoft.com/pt-br/learn/paths/vue-first-steps/?WT.mc_id=javascript-34431-gllemos)** 107 | - ✅ **[Curso Grátis de React - Microsoft Learn](https://docs.microsoft.com/learn/paths/react/?WT.mc_id=javascript-34431-gllemos)** 108 | - ✅ **[Curso Grátis de Deploy Automático de Aplicações Estáticas com Angular, React, Vue & Svelte - Microsoft Learn](https://docs.microsoft.com/learn/modules/publish-app-service-static-web-app-api/?WT.mc_id=javascript-34431-gllemos)** 109 | - ✅ **[Curso Grátis HTML, CSS & JavaScript](https://docs.microsoft.com/learn/modules/build-simple-website/?WT.mc_id=javascript-34431-gllemos)** 110 | 111 | ## ❓ Tenho Dúvidas... O que Faço?! 112 | 113 | Caso tenham dúvidas aos códigos desenvolvidos durante a série de vídeos, sintam-se a vontade em abrir uma **[ISSUE AQUI](https://github.com/glaucia86/js-101-beginners-ms/issues)**. Assim que possível, estarei respondendo as todas as dúvidas que tiverem! 114 | --------------------------------------------------------------------------------