Pular para o conteúdo principal

Declarações de importação

· Leitura de 3 minutos
Dan Clark ([@dandclark1](https://twitter.com/dandclark1)), importador assertivo de declarações de importação

O novo recurso de declarações de importação permite que instruções de importação de módulos incluam informações adicionais junto ao especificador do módulo. Um uso inicial para o recurso é permitir que documentos JSON sejam importados como módulos JSON:

Verificação de marca privada, também conhecido como `#foo in obj`

· Leitura de 3 minutos
Marja Hölttä ([@marjakh](https://twitter.com/marjakh))

O operador in pode ser usado para testar se o objeto dado (ou qualquer objeto em sua cadeia de protótipos) possui a propriedade dada:

const o1 = {'foo': 0};
console.log('foo' in o1); // true
const o2 = {};
console.log('foo' in o2); // false
const o3 = Object.create(o1);
console.log('foo' in o3); // true

O recurso de verificações de marca privada estende o operador in para suportar campos de classe privados:

class A {
  static test(obj) {
    console.log(#foo in obj);
  }
  #foo = 0;
}

A.test(new A()); // true
A.test({}); // false

class B {
 #foo = 0;
}

A.test(new B()); // false; não é o mesmo #foo

Como os nomes privados estão disponíveis apenas dentro da classe que os define, o teste também deve ocorrer dentro da classe, por exemplo, em um método como static test acima.

As instâncias de subclasses recebem campos privados da classe pai como propriedades próprias:

class SubA extends A {};
A.test(new SubA()); // true

Mas objetos criados com Object.create (ou que têm o protótipo definido posteriormente via o setter __proto__ ou Object.setPrototypeOf) não recebem os campos privados como propriedades próprias. Como a busca de campos privados funciona apenas em propriedades próprias, o operador in não encontra esses campos herdados:

Blocos de inicialização estática da classe

· Leitura de 2 minutos
Shu-yu Guo ([@_shu](https://twitter.com/_shu))

A nova sintaxe de blocos de inicialização estática da classe permite que os desenvolvedores agrupem o código que deve ser executado uma vez para uma definição de classe específica e o coloquem em um único lugar. Considere o seguinte exemplo, onde um gerador de números pseudoaleatórios usa um bloco estático para inicializar um conjunto de entropia uma vez, quando a definição class MyPRNG é avaliada.

Atomics.wait, Atomics.notify, Atomics.waitAsync

· Leitura de 8 minutos
[Marja Hölttä](https://twitter.com/marjakh), uma blogueira não bloqueadora

'Atomics.wait' e 'Atomics.notify' são primitivas de sincronização de baixo nível úteis para implementar mutexes e outros meios de sincronização. No entanto, como 'Atomics.wait' é bloqueador, não é possível chamá-lo na thread principal (tentar fazer isso dispara um 'TypeError').

`Intl.DisplayNames`

· Leitura de 4 minutos
Shu-yu Guo ([@_shu](https://twitter.com/_shu)) e Frank Yung-Fong Tang

Aplicações web que alcançam uma audiência global precisam exibir os nomes de exibição de idiomas, regiões, scripts e moedas em muitos idiomas diferentes. As traduções desses nomes requerem dados, que estão disponíveis no Unicode CLDR. Incluir esses dados como parte da aplicação implica em um custo no tempo de desenvolvimento. Os usuários provavelmente preferem traduções consistentes de nomes de idiomas e regiões, e manter esses dados atualizados com os acontecimentos geopolíticos do mundo exige manutenção constante.

Aplicativos rápidos e paralelos com WebAssembly SIMD

· Leitura de 11 minutos
Deepti Gandluri ([@dptig](https://twitter.com/dptig)), Thomas Lively ([@tlively52](https://twitter.com/tlively52)), Ingvar Stepanyan ([@RReverser](https://twitter.com/RReverser))

SIMD significa Single Instruction, Multiple Data. Instruções SIMD são uma classe especial de instruções que exploram o paralelismo de dados em aplicativos ao realizar simultaneamente a mesma operação em vários elementos de dados. Aplicativos intensivos em computação, como codecs de áudio/vídeo e processadores de imagens, são todos exemplos de aplicativos que aproveitam as instruções SIMD para acelerar o desempenho. A maioria das arquiteturas modernas suporta algumas variantes de instruções SIMD.

Índices de correspondência RegExp

· Leitura de 5 minutos
Maya Armyanova ([@Zmayski](https://twitter.com/Zmayski)), regularmente expressando novos recursos

O JavaScript agora está equipado com um novo aprimoramento de expressão regular, chamado “índices de correspondência”. Imagine que você deseja encontrar nomes de variáveis inválidas em código JavaScript que coincidem com palavras reservadas e exibir um acento circunflexo e um “sublinhado” sob o nome da variável, como:

`String.prototype.replaceAll`

· Leitura de 4 minutos
Mathias Bynens ([@mathias](https://twitter.com/mathias))

Se você já trabalhou com strings em JavaScript, é provável que tenha se deparado com o método String#replace. String.prototype.replace(searchValue, replacement) retorna uma string com algumas correspondências substituídas, com base nos parâmetros especificados: