Novidades no ECMAScript 2019 (ES2019)/ES10

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!

 

Deixe um comentário