JavaScript ECMAScript 2020


Índice

    Mostrar índice

Números de versão JavaScript

As versões antigas do JS são nomeadas por números: ES5 (2009) e ES6 (2015).

A partir de 2016, as versões são nomeadas por ano: ECMAScript 2016, 2017, 2018, 2019, ...

Novos recursos no ES2020

  • BigInt

  • String matchAll()

  • O Operador Coalescente Nulo (??)

  • O operador de encadeamento opcional (?.)

  • Operador lógico E de atribuição (&&=)

  • Atribuição OU Lógica (||=)

  • Atribuição de coalescência nula (??=)

  • Promessa allSettled():
    style="word-wrap: break-word;">Promise.allSettled([prom1,prom2,prom3]).então {}

  • Importação Dinâmica

Aviso

Esses recursos são relativamente novos.

Navegadores mais antigos podem precisar de um código alternativo (Polyfill)

JavaScript BigInt

Variáveis JavaScript BigInt são usadas para armazenar grandes valores inteiros que são grandes demais para serem representados por um Número JavaScript normal.

Os inteiros JavaScript são precisos apenas até cerca de 15 dígitos.

Exemplo inteiro

let x = 999999999999999;
let y = 9999999999999999; // too big

Experimente você mesmo →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Numbers</h1>
<h2>Integer Precision</h2>

<p>Integers (numbers without a period or exponent notation) are accurate up to 15 digits:</p>

<p id="demo"></p>

<script>
let x = 999999999999999;
let y = 9999999999999999;
document.getElementById("demo").innerHTML = x + "<br>" + y;
</script>

</body>
</html>


Exemplo BigInt

let x = 9999999999999999;
let y = 9999999999999999n;

Experimente você mesmo →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Numbers</h1>
<h2>Integer and BigInt</h2>

<p id="demo"></p>

<script>
let x = 9999999999999999;
let y = BigInt("9999999999999999");
document.getElementById("demo").innerHTML = x + "<br>" + y;
</script>

</body>
</html>


Para criar um BigInt, anexe n ao final de um número inteiro ou chame BigInt():

Exemplo

let x = 1234567890123456789012345n;
let y = BigInt(1234567890123456789012345)

Experimente você mesmo →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Numbers</h1>
<h2>Create a BigInt</h2>

<p id="demo"></p>

<script>
let x = 123456789012345678901234567890n;
let y = BigInt("123456789012345678901234567890");
document.getElementById("demo").innerHTML = x + "<br>" + y;
</script>

</body>
</html>


O typeof JavaScript de um BigInt é "bigint":

Exemplo

let x = BigInt(999999999999999);
let type = typeof x;

Experimente você mesmo →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Numbers</h1>
<h2>BigInt typeof</h2>

<p>The typeof a BigInt is:</p>
<p id="demo"></p>

<script>
let x = BigInt("9999999999999999");
document.getElementById("demo").innerHTML = typeof x;
</script>

</body>
</html>


BigInt é compatível com todos os navegadores modernos desde setembro de 2020:

Chrome 67 Edge 79 Firefox 68 Safari 14 Opera 54
May 2018 Jan 2020 Jul 2019 Sep 2020 Jun 2018

String JavaScript matchAll()

Antes do ES2020 não havia nenhum método de string que pudesse ser usado para pesquisar todas as ocorrências de uma string em uma string.

Exemplo

const iterator = text.matchAll("Cats");

Experimente você mesmo →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Strings</h1>
<h2>The matchAll() Method</h2>

<p>ES2020 intoduced the string method matchAll().</p>

<p id="demo"></p>

<script>
let text = "I love cats. Cats are very easy to love. Cats are very popular."
const iterator = text.matchAll("Cats");

document.getElementById("demo").innerHTML = Array.from(iterator);
</script>

</body>
</html>

Se o parâmetro for uma expressão regular, o sinalizador global (g) deverá ser definido, caso contrário um TypeError é lançado.

Exemplo

const iterator = text.matchAll(/Cats/g);

Experimente você mesmo →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Strings</h1>
<h2>The matchAll() Method</h2>

<p>ES2020 intoduced the string method matchAll().</p>

<p id="demo"></p>

<script>
let text = "I love cats. Cats are very easy to love. Cats are very popular."
const iterator = text.matchAll(/Cats/g);

document.getElementById("demo").innerHTML = Array.from(iterator);
</script>

</body>
</html>

Se você deseja pesquisar sem distinção entre maiúsculas e minúsculas, o sinalizador insensível (i) deve ser definido:

Exemplo

const iterator = text.matchAll(/Cats/gi);

Experimente você mesmo →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Strings</h1>
<h2>The matchAll() Method</h2>

<p>ES2020 intoduced the string method matchAll().</p>

<p id="demo"></p>

<script>
let text = "I love cats. Cats are very easy to love. Cats are very popular."
const iterator = text.matchAll(/Cats/gi);

document.getElementById("demo").innerHTML = Array.from(iterator);
</script>

</body>
</html>

Observação

ES2021 introduziu o método string replaceAll().



O Operador Coalescente Nulo (??)

O operador ?? retorna o primeiro argumento se não for nulo (nulo ou indefinido).

Caso contrário, ele retorna o segundo.

Exemplo

let name = null;
let text = "missing";
let result = name ?? text;

Experimente você mesmo →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Operators</h1>
<h2>The ?? Operator</h2>
<p>The ?? operator returns the first argument if it is not nullish (null or undefined). Otherwise it returns the second.</p>

<p id="demo"></p>

<script>
let name = null;
let text = "missing";
let result = name ?? text;
document.getElementById("demo").innerHTML = "The name is " + result; 
</script>

</body>
</html>


O operador nullish é compatível com todos os navegadores modernos desde março de 2020:

Chrome 80 Edge 80 Firefox 72 Safari 13.1 Opera 67
Feb 2020 Feb 2020 Jan 2020 Mar 2020 Mar 2020

O operador de encadeamento opcional (?.)

O Operador de Encadeamento Opcional retorna indefinido se um objeto for indefinido ou nulo (em vez de gerar um erro).

Exemplo

const car = {type:"Fiat", model:"500", color:"white"};
let name = car?.name;

Experimente você mesmo →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Operators</h1>
<h2>The ?. Operator</h2>
<p>The ?. operator returns undefined if an object is undefined or null (instead of throwing an error).</p>

<p>Car name is:</p>
<p id="demo"></p>

<script>
const car = {type:"Fiat", model:"500", color:"white"};
let name = car?.name;
document.getElementById("demo").innerHTML = name;
</script>

</body>
</html>

O operador ?.= é compatível com todos os navegadores modernos desde março de 2020:

Chrome 80 Edge 80 Firefox 74 Safari 13.1 Opera 67
Feb 2020 Feb 2020 Mar 2020 Mar 2020 Mar 2020

O operador &&=

O Operador de Atribuição AND Lógico é usado entre dois valores.

Se o primeiro valor for true, o segundo valor será atribuído.

Exemplo de Atribuição Lógica E

let x = 10;
x &&= 5;

Experimente você mesmo →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Assignments</h1>
<h2>Logical AND Assignment</h2>
<h3>The &amp;&amp;= Operator</h3>
<p>If the first value is true, the second value is assigned.</p>

<p id="demo"></p>

<script>
let x = 100;
x &&= 5;
document.getElementById("demo").innerHTML = "Value of x is: " + x;
</script>

</body>
</html>

O operador &&= é compatível com todos os navegadores modernos desde setembro de 2020:

Chrome 85 Edge 85 Firefox 79 Safari 14 Opera 71
Aug 2020 Aug 2020 Mar 2020 Sep 2020 Sep 2020

O operador ||=

O Operador de Atribuição OR Lógico é usado entre dois valores.

Se o primeiro valor for false, o segundo valor será atribuído.

Exemplo de atribuição lógica OR

let x = 10;
x ||= 5;

Experimente você mesmo →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Assignments</h1>
<h2>Logical OR Assignment</h2>
<h3>The ||= Operator</h3>

<p>If the first value is false, the second value is assigned:</p>
<p id="demo"></p>

<script>
let x = undefined;
x ||= 5;
document.getElementById("demo").innerHTML = "Value of x is: " + x;
</script>

</body>
</html>

O operador ||= é compatível com todos os navegadores modernos desde setembro de 2020:

Chrome 85 Edge 85 Firefox 79 Safari 14 Opera 71
Aug 2020 Aug 2020 Mar 2020 Sep 2020 Sep 2020

O ??= Operador

O Operador de Atribuição de Coalescência Nula é usado entre dois valores.

Se o primeiro valor for indefinido ou nulo, o segundo valor será atribuído.

Exemplo de atribuição de coalescência nula

let x;
x ??= 5;

Experimente você mesmo →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Assignments</h1>
<h2>The ??= Operator</h2>
<p>The ??= operator is used between two values. If the first value is undefined or null, the second value is assigned.</p>

<p id="demo"></p>

<script>
let x;
document.getElementById("demo").innerHTML = x ??= 5; 
</script>

</body>
</html>

O operador ??= é compatível com todos os navegadores modernos desde setembro de 2020:

Chrome 85 Edge 85 Firefox 79 Safari 14 Opera 71
Aug 2020 Aug 2020 Mar 2020 Sep 2020 Sep 2020