O que há de novo no JavaScript ES2019

Existe um procedimento padrão para as versões mais recentes do Javascript e há um comitê inteiro por trás dele. Neste artigo, falarei sobre quem toma decisões sobre qualquer nova especificação, qual é o procedimento para ela e o que há de novo no ES2019 .

imagem

A especificação de linguagem que controla o JavaScript é chamada ECMAScript . Há um grupo chamado Comitê Técnico 39 [TC39] , que analisa cada especificação antes da adoção.

Cada mudança ocorre em etapas:

  • Etapa 0: Idéias
  • Etapa 1: Ofertas
  • Etapa 2: Rascunhos
  • Etapa 3: Candidatos
  • Etapa 4: Conclusão / Aprovação

Uma função que atinge o estágio 4 provavelmente faz parte da especificação de idioma.

Considere o que é adicionado à especificação de acordo com ES2019.

Array.prototype. {Flat, flatMap}


Array.prototype.flat () permite suavizar recursivamente matrizes até uma determinada profundidade e retornar uma nova matriz.

Sintaxe: Array.prototype.flat (depth)
depth - o valor padrão é 1, use o Infinito para suavizar todas as matrizes aninhadas.

const numbers = [1, 2, [3, 4, [5, 6]]]; // Considers default depth of 1 numbers.flat(); > [1, 2, 3, 4, [5, 6]] // With depth of 2 numbers.flat(2); > [1, 2, 3, 4, 5, 6] // Executes two flat operations numbers.flat().flat(); > [1, 2, 3, 4, 5, 6] // Flattens recursively until the array contains no nested arrays numbers.flat(Infinity) > [1, 2, 3, 4, 5, 6] 

Array.prototype.flatMap () mapeia cada elemento usando uma função de mapeamento e alinha o resultado a uma nova matriz. Isso é idêntico à operação do mapa , seguida por uma profundidade plana de 1.

Sintaxe: Array.prototype.flatMap (retorno de chamada)
retorno de chamada: uma função que produz o elemento de uma nova matriz.

 const numbers = [1, 2, 3]; numbers.map(x => [x * 2]); > [[2], [4], [6]] numbers.flatMap(x => [x * 2]); > [2, 4, 6] 

Object.fromEntries


Object.fromEntries faz o oposto de Object.entries. Ele converte uma lista de pares de valores-chave em um objeto.

Sintaxe: Object.fromEntries (iterável)
iteração: Iteração como objetos Array ou Map que implementam o protocolo iterável .

 const records = [['name','Mathew'], ['age', 32]]; const obj = Object.fromEntries(records); > { name: 'Mathew', age: 32} Object.entries(obj); > [['name','Mathew'], ['age', 32]]; 

String.protótipo. {TrimStart, trimEnd}


trimStart () remove espaços no início de uma linha e trimEnd () remove espaços no final de uma linha.

 const greeting = ` Hello Javascript! `; greeting.length; > 19 greeting = greeting.trimStart(); > 'Hello Javascript! ' greeting.length; > 18 greeting = 'Hello World! '; greeting.length; > 15 greeting = greeting.trimEnd(); > 'Hello World!' greeting.length; > 12 

Encadernação opcional


Antes da nova especificação, era necessário ter uma variável de exceção vinculada a uma instrução catch . ES2019 tornou opcional.

 // Before try { ... } catch(error) { ... } // After try { ... } catch { ... } 

Esse recurso é útil se você deseja ignorar completamente o erro. A melhor prática é considerar o tratamento de erros.

Há momentos em que você conhece um possível erro que pode funcionar ao executar operações. E você pode ignorar a manipulação de capturas.

JSON ⊂ ECMAScript


Os caracteres separador de linha (U + 2028) e separador de parágrafo (U + 2029) agora são permitidos em literais de string. Anteriormente, eles eram considerados terminadores de sequência e lançavam exceções SyntaxError .

 // Produces invalid string before ES2019 eval('"\u2028"'); // Valid in ES2019 eval('"\u2028"'); 

JSON.stringify bem formado


Em vez de pontos de código substitutos não emparelhados que levam a unidades de código UTF-16 únicas, o ES10 os representa usando sequências de escape JSON.

 JSON.stringify('\uD800'); > '" "' JSON.stringify('\uD800'); > '"\\ud800"' 

Function.prototype.toString


.toString () agora retorna trechos exatos do código-fonte, incluindo espaços e comentários.

 function /* a comment */ foo () {} // Previously: foo.toString(); > 'function foo() {}' ^ no comment ^ no space // Now: foo.toString(); > 'function /* comment */ foo () {}' 

Symbol.prototype.description


Uma propriedade somente leitura que retorna uma descrição opcional do objeto Symbol :

 Symbol('desc').toString(); > "Symbol(desc)" Symbol('desc').description; > "desc" Symbol('').description; > "" Symbol().description; > undefined 

Conclusão


Existem muitas outras coisas interessantes, como métodos e campos estáticos e privados nas classes, RegEx herdado, etc. É importante que o desenvolvedor monitore o surgimento de novas tecnologias, melhore as antigas e use isso no trabalho.

Será útil ler versões anteriores: ES2015 ES2016 ES2017 ES2018

Source: https://habr.com/ru/post/pt439532/


All Articles