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 .

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