A versão 72 do Chrome lançou alguns novos recursos interessantes do ES10:
.Flat():
O método flat() cria um novo vetor recursivamente com todos os elementos do sub-vetor concatenados nele até a profundidade especificada.
let vetor = [1, 2, 3, [4, 5, 6, [7, 8, 9, [10, 11, 12]]]]; vetor.flat(); // (7) [1, 2, 3, 4, 5, 6, Array(4)] vetor.flat().flat(); // (10) [1, 2, 3, 4, 5, 6, 7, 8, 9, Array(3)] vetor.flat().flat().flat(); //(12) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] vetor.flat(Infinity); //(12) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
.flatMap():
O método flatMap() primeiramente mapeia cada elemento do vetor usando uma função e mapeamente para, em seguida, nivelar o resultado em um novo array. O flatMap é bastante útil, pois mescla um mapa seguido por um flat de profundidade 1 em um método mais eficiente.
let vetor = [1, 2, 3, 4, 5]; vetor.map(x => [x, x*2]); // (5) [Array(2), Array(2), Array(2), Array(2), Array(2)] // 0: (2) [1, 2] // 1: (2) [2, 4] // 2: (2) [3, 6] // 3: (2) [4, 8] // 4: (2) [5, 10] vetor.flatMap(v=>[v, v*2]); // (10) [1, 2, 2, 4, 3, 6, 4, 8, 5, 10]
Object.fromEntries():
O método Object.fromEntries() transforma uma lista de pares de valores-chave em um objeto.
Exemplo 1:
let obj = { chave1:'valor1', chave2:'valor2', chave3:'valor3' } let entries = Object.entries(obj); console.log(entries); // (3) [Array(2), Array(2), Array(2)]0: (2) ["chave1", "valor1"]1: (2) ["chave2", "valor2"]2: (2) ["chave3", "valor3"] let fromEntries = Object.fromEntries(entries); console.log(fromEntries); // {chave1: "valor1", chave2: "valor2", chave3: "valor3"}
Exemplo 2:
let entries = new Map([ ['nome', 'ben'], ['idade', 25] ]); Object.fromEntries(entries); // {nome: "ben", idade: 25}
String.trimStart() & String.trimEnd():
O método trimStart() remove espaços em branco do início de uma string. O método trimEnd() remove espaços em branco do final de uma string.
let olaMundo = " Olá Mundo! "; console.log(JSON.stringify(olaMundo.trimEnd())); // " Olá Mundo!" console.log(JSON.stringify(olaMundo.trimStart())); // "Olá Mundo! "
Optional Catch Binding:
Permite que os desenvolvedores usem try / catch sem criar uma ligação não utilizada. Você pode fazer uso do catch block sem um parâmetro.
try { throw new Error("sem erro"); } catch { console.log("nenhum parâmetro no catch"); } // nenhum parâmetro no catch
Antes era obrigatório usar parâmetro no catch block:
try { throw new Error ("Algum erro aleatório"); } catch(e) { console.log(e); } // Error: Algum erro aleatório
Function.toString():
O método toString() retorna uma string representando o código-fonte da função. Espaços em branco, novas linhas e comentários serão removidos quando você fizer isso agora, eles serão retidos com o código-fonte original.
function digaOla(texto){ let nome = texto; console.log(`Olá ${nome}`) } console.log(digaOla.toString()); // function digaOla(texto){ // let nome = texto; // console.log(`Olá ${nome}`) // }
Symbol.description:
A propriedade de descrição read-only é uma string que retorna a descrição opcional de objetos Symbol.
let meuSymbol = "Meu Symbol"; let symObjeto = Symbol(meuSymbol); console.log(symObjeto); // Symbol(Meu Symbol) console.log(String(symObjeto) === `Symbol(${meuSymbol})`); // true console.log(symObjeto.description); // Meu Symbol
Well Formed JSON.Stringify():
Para evitar que o JSON.stringify retorne cadeias de caracteres Unicode malformadas:
JSON.stringify("𝌆"); ""𝌆"" JSON.stringify('\uD834\uDF06'); ""𝌆"" JSON.stringify("\uDF06\uD834"); ""\udf06\ud834"" JSON.stringify("\uDEAD"); ""\udead""
Array.Sort Stability:
Usuários com a mesma classificação mantêm sua ordem de classificação:
let users = [ { nome: "João", rating: 14 }, { nome: "Marcelo", rating: 14 }, { nome: "Davi", rating: 13 }, { nome: "Maria", rating: 13 }, { nome: "Marcela", rating: 13 }, { nome: "Kelly", rating: 13 }, { nome: "Patrícia", rating: 13 }, { nome: "Leonardo", rating: 13 }, { nome: "Júlio", rating: 12 }, { nome: "Joana", rating: 12 }, { nome: "Maurício", rating: 12 } ]; users.sort((a,b)=> a.rating - b.rating); // (11) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}] // 0: {nome: "Júlio", rating: 12} // 1: {nome: "Joana", rating: 12} // 2: {nome: "Maurício", rating: 12} // 3: {nome: "Davi", rating: 13} // 4: {nome: "Maria", rating: 13} // 5: {nome: "Marcela", rating: 13} // 6: {nome: "Kelly", rating: 13} // 7: {nome: "Patrícia", rating: 13} // 8: {nome: "Leonardo", rating: 13} // 9: {nome: "João", rating: 14} // 10: {nome: "Marcelo", rating: 14}
Anteriormente, o V8 usava um QuickSort instável para arrays com mais de 10 elementos. A partir do V8 v7.0 / Chrome 70, o V8 usa o algoritmo TimSort estável. O único mecanismo JavaScript que ainda possui uma implementação de ordenação instável é o Chakra, que usa o QuickSort para arrays com mais de 512 elementos (e uma ordenação de inserção estável para qualquer outra coisa). Para mais informações, leia este artigo.
JSON ⊂ ECMAScript (JSON Superset):
Estende a sintaxe ECMA-262 em um superconjunto JSON. A sintaxe do JSON é definida pelo ECMA-404 e permanentemente corrigida pelo RFC 7159, mas as produções DoubleStringCharacter e SingleStringCharacter do ECMA-262 podem ser estendidas para permitir que os caracteres U+ 2028 LINE SEPARATOR e U + 2029 PARAGRAPH SEPARATOR sem escape sejam removidos. Para mais informações, leia esta proposta.
const LP = ""; const PS = eval("'\u2029'");
Gostou desta notícia? Deixe seu comentário abaixo!