Novas funcionalidade do JavaScript em ES2019 (ES10)
Tags: features, es10, javascript, ecmascript2019
Published: 2020-03-31 12:23:24

---
title: Novas funcionalidade do JavaScript em ES2019 (ES10)
published: true
date: 2020-03-31 12:07:08 UTC
tags: features,es10,javascript,ecmascript2019
canonical_url: 
---

![](https://cdn-images-1.medium.com/max/1024/1*3JO85336i_0CqIFnfzmSjA.jpeg)<figcaption>Photo by <a href="https://unsplash.com/@pixel_talkies?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Nijwam Swargiary</a> on <a href="https://unsplash.com/s/photos/news?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></figcaption>

Faz um certo tempo que o ECMAScript 2019 foi lançado, mas pouco se vê falar ou utilizar as funcionalidades trazidas pela edição. Várias das novas funcionalidades podem ajudar muito no seu dia-a-dia em coisas que antes você precisava “implementar na mão”. Mesmo que já tenha passado algum tempo, é extremamente necessário sempre reforçamos os aprendizados e analisarmos se deixamos de passar algo.

É importante saber que para rodar os exemplos que serão apresentados, você precisará do NodeJS a partir da versão 12, ou com o Chrome na versão 72.

### Array#{flat,flatMap}

O método flat cria um novo array concatenando todos os elementos que são sub-arrays.

{% gist https://gist.github.com/omarkdev/e9d88d06539941210dcd7d149daeefa9 %}

O parâmetro que esse método pode receber representa o nível de profundidade que será concatenado os sub-arrays, por ser um parâmetro opcional, caso não seja informado nenhum valor o seu valor padrão será 1. Caso você queira todos os níveis, basta informar o valor Infinity.

{% gist https://gist.github.com/omarkdev/842e343c41653729cc9bf02956de8ebf %}

É importante sabermos também que o método exclui intervalos ou elementos vazios no array.

{% gist https://gist.github.com/omarkdev/0876234bd778a6302072b16c1da9f81f %}

Entendendo como o método flat funciona, fica mais fácil entendermos qual o objetivo do método flatMap. Resumidamente, o método tem o mesmo efeito usando o map seguido de um flat , dessa maneira se o seu flatMap retornar um array, ele será concatenado.

{% gist https://gist.github.com/omarkdev/52e582b2dd9f7e82e7615568ccce23b2 %}

É importante saber que o flatMap por padrão é definido com profundidade 1, que seria como chamar o flat sem parâmetros ou informando o valor 1.

### Object.fromEntries()

A função cria um novo objeto a partir de um [_iterable_](https://alligator.io/js/iterables/) que tenha pares chave-valor.

{% gist https://gist.github.com/omarkdev/576be5eb5469f8290d1f2c7e39663556 %}

### String#{trimStart,trimEnd}

Os métodos trimStart e trimEnd tem quase a mesma finalidade, ambos removem os espaços em branco de algum lado de uma string, a diferença é que o trimEnd remove os espaços em branco que estão apenas no final da string e o trimStart apenas os que estão no começo.

{% gist https://gist.github.com/omarkdev/f5105649569e03e3bb52d9fd9db4bad0 %}

### Symbol#description

Antigamente caso precisássemos saber qual a descrição do nosso Symbol era necessário chamar o método toString, que retornava a descrição dentro de Symbol().

{% gist https://gist.github.com/omarkdev/f503094a6d98e054ef56cee166a5947b %}

Dessa maneira antiga, caso fosse necessário obter apenas a descrição, era necessário fazer algum tipo de formatação. Para resolver isso, foi adicionado a propriedade de apenas leitura description que contém apenas a descrição do Symbol, caso o Symbol foi criado sem nenhuma descrição, a propriedade terá o valor undefined.

{% gist https://gist.github.com/omarkdev/8f24eff2b6098c4dd61e275286b803b1 %}

### Parâmetros opcionais no catch

Agora o ES10 nos permite criar blocos de try/catch sem que seja necessário fornecer o parâmetro de erro no bloco de catch.

{% gist https://gist.github.com/omarkdev/3fc10766c54b36d28c040f34c4ccc5a8 %}

Esse tipo de abordagem é muito útil para quando você sabe que não vai utilizar o objeto de erro.

### Revisão de Function#toString

Nas versões anteriores do ECMAScript, você pode imprimir o código-fonte de uma função usando o método toString, porém todos os espaços em branco e comentários eram removidos. Agora com o ES10, esses trechos são mantidos.

{% gist https://gist.github.com/omarkdev/649a96601a5616bc00a403e05a3b11ba %}

### Estabilidade no Array#sort

Anteriormente, o V8 (Motor do JavaScript) usava um método de ordenação chamado QuickSort para arrays que tinham mais de 10 elementos, apesar de ser um método extremamente rápido, era bem instável.

A partir do V8 7.0 / Chrome 70, o V8 passou a utilizar o algoritmo TimSort.

Caso você queira saber mais sobre o assunto, você pode ver a [demo](https://mathiasbynens.be/demo/sort-stability) do [Mathias Bynens](https://mathiasbynens.be/).

### Melhor formatação no JSON.stringify

Foi adicionado uma melhoria para impedir que o JSON.stringify retorne caracteres Unicode mal formatados.

### Melhorias no JSON

A Sintaxe do JSON é definido pelo [ECMA-404](http://www.ecma-international.org/publications/standards/Ecma-404.htm) e permanentemente corrigida pela [RFC-7159](https://tools.ietf.org/html/rfc7159), permitindo que o separador de linha (\u2028) e o separador de parágrafo (\u2029) possam ser exibidos corretamente sem disparar um erro.

Espero que isso te ajude de alguma forma.

**Twitter** : [_https://twitter.com/omarkdev_](https://twitter.com/omarkdev)  
**_Github_** : [_https://github.com/omarkdev_](https://github.com/omarkdev)

* * *