ECMAScript 2019
Número da versão do JavaScript
Versões antigas do JS são nomeadas por número: ES5 (2009) e ES6 (2015).
A partir de 2016, as versões são nomeadas por ano: ECMAScript 2016, 2017, 2018, 2019, ...
Novas características do ES2019:
- String.trimStart()
- String.trimEnd()
- Object.fromEntries
- Bindeamento opcional catch
- Array.flat()
- Array.flatMap()
- Array.Sort() revisado
- Revisão de JSON.stringify()
- Separadores permitidos em textos de string
- Function.toString() revisado
Aviso
Essas características são relativamente novas.
Navegadores mais antigos podem precisar de código alternativo (Polyfill)
Método de String JavaScript trimStart()
ES2019 adicionou o método String ao JavaScript trimStart()
。
trimStart()
A maneira como o método funciona é semelhante à trim()
Da mesma forma, mas remove apenas os espaços do início da string.
Exemplo
let texto1 = " Olá Mundo! "; let texto2 = texto1.trimStart();
Desde janeiro de 2020, todos os navegadores modernos suportam o JavaScript String trimStart():
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 66 | Edge 79 | Firefox 61 | Safari 12 | Opera 50 |
Em abril de 2018 | Em janeiro de 2020 | Em junho de 2018 | Em setembro de 2018 | Em maio de 2018 |
Método de String JavaScript trimEnd()
O ES2019 adicionou para o JavaScript trimEnd()
métodos de string.
trimEnd()
A maneira como o método funciona é semelhante à trim()
Da mesma forma, mas remove apenas os espaços do final da string.
Exemplo
let texto1 = " Olá Mundo! "; let texto2 = texto1.trimEnd();
Desde janeiro de 2020, todos os navegadores modernos suportam o JavaScript String trimEnd():
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 66 | Edge 79 | Firefox 61 | Safari 12 | Opera 50 |
Em abril de 2018 | Em janeiro de 2020 | Em junho de 2018 | Em setembro de 2018 | Em maio de 2018 |
Método de Objeto JavaScript fromEntries()
O ES2019 adicionou para o JavaScript fromEntries()
Métodos de objeto.
fromEntries()
O método cria um objeto a partir de pares iteráveis de chave/valor.
Exemplo
const fruits = [ ["apples", 300], ["pears", 900], ["bananas", 500] ]; const myObj = Object.fromEntries(fruits);
Desde janeiro de 2020, todos os navegadores modernos suportam o JavaScript String trimEnd():
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 73 | Edge 79 | Firefox 63 | Safari 12.1 | Opera 60 |
Em março de 2019 | Em janeiro de 2020 | Em outubro de 2018 | Em março de 2019 | Em abril de 2019 |
Bindeamento opcional catch
A partir do ES2019, se não necessário, o parâmetro catch pode ser omitido:
Exemplo
Antes de 2019:
try { // código catch (err) { // código }
Após 2019:
try { // código catch { // código }
Desde janeiro de 2020, todos os navegadores modernos suportam o binding opcional catch:
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 66 | Edge 79 | Firefox 58 | Safari 11.1 | Opera 53 |
Em abril de 2018 | Em janeiro de 2020 | Em janeiro de 2018 | Em março de 2018 | Em maio de 2018 |
Método de Array JavaScript flat()
O ES2019 adicionou para o JavaScript flat()
Métodos de array.
flat()
O método cria um novo array através da expansão do array aninhado.
Exemplo
const myArr = [[1,2],[3,4],[5,6]]; const newArr = myArr.flat();
Desde janeiro de 2020, todos os navegadores modernos suportam o JavaScript Array flat():
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 69 | Edge 79 | Firefox 62 | Safari 12 | Opera 56 |
Em setembro de 2018 | Em janeiro de 2020 | Em setembro de 2018 | Em setembro de 2018 | Em setembro de 2018 |
Método de Array JavaScript flatMap()
O ES2019 adicionou para o JavaScript flatMap()
Métodos de array.
flatMap()
O método primeiro mapeia todos os elementos do array, então cria um novo array através da expansão do array.
Exemplo
const myArr = [1, 2, 3, 4, 5, 6]; const newArr = myArr.flatMap((x) => x * 2);
Método estável de Array sort()
ES2019 Revisãodo método sort() do Array.
Antes de 2019, o padrão permitia algoritmos de ordenação não estáveis, como QuickSort.
Depois do ES2019, os navegadores devem usar algoritmos de ordenação estáveis:
Quando elementos são ordenados com base em um valor, esses elementos devem manter suas posições relativas a outros elementos com o mesmo valor.
Exemplo
const myArr = [ {name:"X00",price:100 }, {name:"X01",price:100 }, {name:"X02",price:100 }, {name:"X03",price:100 }, {name:"X04",price:110 }, {name:"X05",price:110 }, {name:"X06",price:110 }, {name:"X07",price:110 } ];
No exemplo acima, quando ordenado por preço, os resultados não são permitidos em outras posições relativas, conforme mostrado a seguir:
X01 100 X03 100 X00 100 X03 100 X05 110 X04 110 X06 110 X07 110
Revisão de JSON.stringify()
ES2019 Revisãodo método stringify() do JSON.
Antes de 2019, o JSON não podia serializar caracteres codificados com \.
Exemplo
let text = JSON.stringify("\u26D4");
Antes do ES2019, o JSON.stringify() retornaria caracteres Unicode danificados em pontos de código UTF-8 (U+D800 a U+DFFF), por exemplo, ���.
Após esta revisão, strings com pontos de código UTF-8 podem ser convertidas de forma segura usando JSON.stringify() e restauradas para a string original usando JSON.parse().
Símbolo de separação
Agora, é permitido usar delimitadores de linha e de parágrafo em textos de string (\u2028
e \u2029
)
Antes de 2019, esses eram considerados delimitadores de linha e causavam exceções de erro:
Exemplo
// Isso é válido no ES2019: let text = "\u2028";
Atenção
Agora, JavaScript e JSON compartilham as mesmas regras.
Antes do ES2019:
text = JSON.parse('"\u2028"') será analisado como ''.
text = '"\u2028"' forneceráErro de sintaxe。
Revisão de Function toString()
ES2019 RevisãoMétodo Function toString().
O método toString() retorna uma string que representa o código-fonte da função.
A partir de 2019, toString() deve retornar o código-fonte da função, incluindo comentários, espaços em branco e detalhes de sintaxe.
Antes de 2019, diferentes navegadores retornavam variantes de função diferentes (por exemplo, sem comentários e espaços em branco). A partir de 2019, a função deve ser retornada exatamente conforme escrita.
Exemplo
function myFunction(p1, p2) { return p1 * p2; }