JavaScript ES6+
JavaScript ES6+ introduziu várias melhorias e recursos que tornam o código mais conciso e legível. Esses recursos incluem let e const, template literals, destructuring, arrow functions, promises e async/await.
Sumário:
- Bases do ES6+ - JavaScript ES6+ é a versão mais recente do JavaScript, que introduziu várias melhorias e recursos que tornam o código mais conciso e legível. Esses recursos incluem let e const, template literals, destructuring, arrow functions, promises e async/await, entre outros.
- Template Literals e desestruturação - Template literals são strings que permitem interpolação de variáveis e expressões. A desestruturação é uma maneira de extrair valores de objetos e vetores de forma mais concisa.
Bases do ES6+
JavaScript ES6+ é a versão mais recente do JavaScript, que introduziu várias melhorias e recursos que tornam o código mais conciso e legível. Esses recursos incluem let e const, template literals, destructuring, arrow functions, promises e async/await, entre outros.
Exemplo:
1let x = 5; 2const y = 6; 3 4console.log(`x: ${x}, y: ${y}`); 5// x: 5, y: 6 6 7let person = {name: 'Diana', job: 'Developer'}; 8let {name, job} = person; 9 10console.log(`Name: ${name}, Job: ${job}`); 11// Name: Diana, Job: Developer 12 13let add = (x, y) => x + y; 14console.log(add(5, 6)); 15// 11 16 17let promise = new Promise((resolve, reject) => { 18 setTimeout(() => { 19 resolve('Success'); 20 }, 1000); 21}); 22 23promise.then(result => { 24 console.log(result); 25}); 26// Success 27 28async function fetchData() { 29 let response = await fetch('https://api.example.com/data'); 30 let data = await response.json(); 31 console.log(data); 32} 33 34fetchData(); 35// Dados da API
Diferenças entre let, const e var
As palavras-chave let, const e var são usadas para declarar variáveis em JavaScript. A principal diferença entre elas é o escopo e a mutabilidade.
Exemplo:
1var x = 5; // Escopo global ou de função 2let y = 6; // Escopo de bloco 3const z = 7; // Escopo de bloco e imutável 4 5x = 10; // Válido 6// y = 20; // Válido, pois let permite reatribuição 7// z = 30; // Inválido, pois const não permite reatribuição
Escopo global, de bloco e de função
O escopo determina onde uma variável pode ser acessada no código. Em JavaScript, existem três tipos principais de escopo: global, de bloco e de função.
Exemplo:
1var globalVar = 'I am global'; // Escopo global 2 3function myFunction() { 4 var functionVar = 'I am local to this function'; // Escopo de função 5 if (true) { 6 let blockVar = 'I am local to this block'; // Escopo de bloco 7 console.log(blockVar); // I am local to this block 8 } 9 // console.log(blockVar); // Inválido, blockVar não está acessível aqui 10 console.log(functionVar); // I am local to this function 11} 12 13myFunction(); 14console.log(globalVar); // I am global 15// console.log(functionVar); // Inválido, functionVar não está acessível aqui
Imutabilidade com const
A palavra-chave const é usada para declarar constantes, que são variáveis cujo valor não pode ser reatribuído após a declaração. No entanto, se a constante for um objeto ou vetor, suas propriedades ou elementos ainda podem ser modificados.
Exemplo:
1const person = {name: 'Diana', job: 'Developer'}; 2 3// person = {name: 'Alice'}; // Inválido, não é possível reatribuir uma constante 4person.name = 'Alice'; // Válido, é possível modificar propriedades 5console.log(person.name); // Alice 6 7const numbers = [1, 2, 3]; 8 9// numbers = [4, 5, 6]; // Inválido, não é possível reatribuir uma constante 10numbers.push(4); // Válido, é possível modificar o vetor 11console.log(numbers); // [1, 2, 3, 4]
Arrow Functions e this
Arrow functions são uma forma concisa de escrever funções em JavaScript. Elas não têm seu próprio contexto de this, o que significa que o valor de this dentro de uma arrow function é o mesmo que o valor de this no escopo onde a função foi definida.
Exemplo:
1const person = { 2 name: 'Diana', 3 greet: function() { 4 setTimeout(() => { 5 console.log(`Hello, ${this.name}!`); 6 }, 1000); 7 } 8}; 9 10person.greet(); // Hello, Diana! (após 1 segundo)
Template Literals e desestruturação
Template literals são strings que permitem interpolação de variáveis e expressões. A desestruturação é uma maneira de extrair valores de objetos e vetores de forma mais concisa.
Exemplo:
1let name = 'Diana'; 2let job = 'Developer'; 3 4console.log(`Name: ${name}, Job: ${job}`); 5// Name: Diana, Job: Developer 6 7let person = {name: 'Diana', job: 'Developer'}; 8let {name, job} = person; 9 10console.log(`Name: ${name}, Job: ${job}`); 11// Name: Diana, Job: Developer
Interpolação de strings
A interpolação de strings permite inserir variáveis e expressões dentro de strings usando template literals. Isso facilita a criação de strings dinâmicas.
Exemplo:
1let name = 'Diana'; 2let job = 'Developer'; 3 4console.log(`Name: ${name}, Job: ${job}`); 5// Name: Diana, Job: Developer
String em múltiplas linhas
Template literals permitem criar strings em múltiplas linhas sem a necessidade de concatenar várias strings ou usar caracteres especiais. Isso torna o código mais legível e organizado.
Exemplo:
1let message = `Hello, 2This is a message 3in multiple lines.`; 4 5console.log(message); 6// Hello, 7// This is a message 8// in multiple lines.
Desestruturação de objetos e vetores
A desestruturação permite extrair valores de objetos e vetores de forma mais concisa. Isso facilita a atribuição de valores a variáveis sem a necessidade de acessar cada propriedade individualmente.
Exemplo:
1let person = {name: 'Diana', job: 'Developer'}; 2let {name, job} = person; 3 4console.log(`Name: ${name}, Job: ${job}`); 5// Name: Diana, Job: Developer 6 7let fruits = ['apple', 'banana', 'cherry']; 8let [first, second] = fruits; 9 10console.log(`First fruit: ${first}, Second fruit: ${second}`); 11// First fruit: apple, Second fruit: banana
Desestruturação de objetos, renomeando variáveis
A desestruturação de objetos permite renomear variáveis ao extrair valores de um objeto. Isso é útil quando você deseja usar nomes de variáveis diferentes dos nomes das propriedades do objeto.
Exemplo:
1let person = {name: 'Diana', job: 'Developer'}; 2let {name: fullName, job: occupation} = person; 3 4console.log(`Full Name: ${fullName}, Occupation: ${occupation}`); 5// Full Name: Diana, Occupation: Developer
Desestruturação de vetores, pulando elementos
A desestruturação de vetores permite extrair valores de um vetor e pular elementos indesejados. Isso é útil quando você deseja extrair apenas alguns elementos de um vetor sem precisar acessar cada um individualmente.
Exemplo:
1let fruits = ['apple', 'banana', 'cherry', 'date']; 2let [first, , third] = fruits; 3 4console.log(`First fruit: ${first}, Third fruit: ${third}`); 5// First fruit: apple, Third fruit: cherry
Desestruturação de vetores, restando elementos
A desestruturação de vetores com o operador rest permite extrair todos os elementos restantes de um vetor em uma nova variável. Isso é útil quando você deseja capturar todos os elementos restantes de um vetor após extrair alguns elementos específicos.
Exemplo:
1let fruits = ['apple', 'banana', 'cherry', 'date']; 2let [first, second, ...rest] = fruits; 3 4console.log(`First fruit: ${first}, Second fruit: ${second}`); 5// First fruit: apple, Second fruit: banana 6console.log(`Rest of the fruits: ${rest}`); 7// Rest of the fruits: cherry,date
Desestruturação de objetos aninhados
A desestruturação de objetos aninhados permite extrair valores de objetos que estão dentro de outros objetos. Isso é útil quando você trabalha com estruturas de dados complexas.
Exemplo:
1let person = { 2 name: 'Diana', 3 job: { 4 title: 'Developer', 5 experience: 5 6 } 7}; 8let {name, job: {title, experience}} = person; 9 10console.log(`Name: ${name}, Job Title: ${title}, Experience: ${experience} years`); 11// Name: Diana, Job Title: Developer, Experience: 5 years
Desestruturação de vetores aninhados
A desestruturação de vetores aninhados permite extrair valores de vetores que estão dentro de outros vetores. Isso é útil quando você trabalha com estruturas de dados complexas.
Exemplo:
1let fruits = [['apple', 'banana'], ['cherry', 'date']]; 2let [[firstFruit, secondFruit], [thirdFruit, fourthFruit]] = fruits; 3 4console.log(`First Fruit: ${firstFruit}, Second Fruit: ${secondFruit}`); 5// First Fruit: apple, Second Fruit: banana 6console.log(`Third Fruit: ${thirdFruit}, Fourth Fruit: ${fourthFruit}`); 7// Third Fruit: cherry, Fourth Fruit: date