Para quem não sabe, TC39 é a organização por trás da padronização de a especificação ECMAScript (JavaScript). Desde o grande lançamento do ES6 em 2015, tornou-se a norma lançar novos recursos anualmente.
Para que um recurso seja adicionado a uma versão anual, ele precisa passar por quatro estágios de proposta, sendo o estágio final a aprovação. Vamos dar uma olhada nas cinco propostas de recursos que estão atualmente no estágio final , com uma data de lançamento prevista para meados de 2021.
1. Operadores de atribuição lógica
Os novos operadores de atribuição lógica &&=
, ||=
e ??=
são bastante semelhantes aos existentes operadores lógicos e são bastante úteis para atribuir valores padrão a variáveis.
Operador lógico de atribuição OR ( ||=
)
x ||=y
O operador lógico de atribuição OR é uma operação de curto-circuito, assim como o operador lógico OR ( ||
). A expressão acima é idêntica a x || (x=y)
, o que significa que y
só será atribuído a x
se x
for falsy . Caso contrário, x
retém seu valor original.
<"Exemplo:✓
const giveKey=()=> { //executa cálculos aleatórios return"somekey"; } let userDetails={name:"chika", age: 5, room: 10, key:""} userDetails.key ||=giveKey () console.log (userDetails.key) //output: somekey
console.log (userDetails.key)
retorna "somekey"
porque o valor da chave original era uma string vazia, que é um valor falso.
Operador lógico de atribuição AND ( &&=
)
x &&=y
O operador lógico de atribuição AND é o oposto do operador lógico de atribuição OR. Nesse caso, y
é atribuído apenas a x
, se e somente se x
for um truthy . Caso contrário, ele retém seu valor original.
O operato lógico nulo r atribui apenas <"Exemplo:✓ Aqui, a saída é O O método O separador numérico simplesmente melhora a legibilidade de números grandes usando o caractere sublinhado ( Agora está muito mais legível. Observe que isso não tem nenhum benefício de desempenho ou afeta a igualdade. O <"Exemplo:✓ Quando você cria um objeto em JavaScript e o atribui a uma variável, o mecanismo JavaScript em execução em um navegador aloca um endereço de memória que armazena o objeto. Por outro lado, a variável à qual o objeto é atribuído armazena o endereço de memória do objeto e não o valor do próprio objeto. Portanto, você pode dizer que Conforme os objetos são criados e armazenados na memória, em algum ponto, o navegador pode começar a ficar sem memória e precisará liberar espaço na memória. A coleta de lixo é o processo pelo qual o mecanismo do navegador libera espaço de memória, excluindo objetos que não são mais referenciados por nenhuma variável. Um Os novos recursos do ES2021 já são suportados por versões recentes dos principais navegadores como Chrome 85, Firefox 79 e Safari 14. No entanto, para permitir que seu código seja executado em navegadores mais antigos, você precisa configurar seu projeto com o B abel complier. Instale os seguintes pacotes: Crie um arquivo A configuração acima instrui o Babel a usar a predefinição env, que contém transformações para todos os recursos JavaScript mais recentes que chegaram ao estágio quatro do processo de proposta TC39. Ele também instrui o Babel a recuperar polyfills quando necessário do JS principal. Crie um arquivo A consulta Agora, você pode executar: Isso analisará e transformará todos os seus arquivos JavaScript no diretório N.B ., se você estiver usando um conjunto de ferramentas como Create React App ou vue-cli, essas configurações já foram abstraídas. E é isso. Você está pronto para ir. Vá e comece a usar o ES2021 hoje! A postagem Novos recursos do ES2021 que você pode ter perdido apareceu primeiro no LogRocket Blog . const deleteKey=()=> { //executa cálculos aleatórios Retorna"";
}
let userDetails={name:"chika", age: 5, room: 10, key:"990000"}
userDetails.key &&=deleteKey ()
console.log (userDetails.key) //resultado:""
userDetails.key &&=deleteKey ()
retorna uma string vazia da função deleteKey
porque o valor anterior de userDetails
era um número, que é um valor verdadeiro. Operador lógico de atribuição nula (
??=
) x ??=y
y
para x
se x
for nulo (ou seja, nulo ou indefinido). const getKey=()=> { //executa cálculos aleatórios return"somekey";
}
let userDetails={name:"chika", age: 5, room: 10,}
userDetails.key ??=getKey ()
console.log (userDetails.key) //output:"somekey"
"somekey"
porque userDetails.key
não existe no objeto de resposta (ou seja, é indefinido). 2.
String.replaceAll
const newString=oldString.replaceAll (padrão, substituição);
replaceAll
método retorna uma nova string na qual todas as ocorrências de um padrão
são substituídas por uma substituição
passada a ele. O parâmetro pattern
pode ser uma string ou um padrão regex, e o substituição
pode ser uma string ou uma função que cria uma nova string para substituir o padrão
. replaceAll
é uma sequência do String.replace
método, que apenas substitui a primeira ocorrência do pattern
por replacement
. const str="Linda é uma desenvolvedora autodidata. Linda governará o mundo"; let newStr=str.replace ("Linda","Micheal")
//output: Micheal é um desenvolvedor autodidata. Linda governará o mundo let newStr=str.replaceAll ("Linda","Micheal")
//output: Micheal é um desenvolvedor autodidata. Michael vai governar o mundo
3. Separador numérico
_
) para separar grupos de números, da mesma forma que você usa vírgulas para separar números por escrito. Considere o número 1200044555
. À primeira vista, é muito difícil decifrar que esse número é 1,2 bilhão e algo assim. const billGatesNetWorth=1_200_044_555;
1_200_044_555
ainda é igual a 1200044555
. 4.
Promise.Any
Promise.any ([promessa1, promessa2, promessa3,...]). então (.... faça algo)
Promise.any ()
método é um novo método de promessa que aceita uma série de promessas e resolve o valor da primeira promessa a ser resolvida com sucesso. Em outras palavras, o promessa.all
resolve com sucesso se alguma das promessas for resolvida e rejeita se todas as promessas forem rejeitadas. const promessa1=nova promessa ((resolver)=> setTimeout ((resolver)=> resolver, 300,'mais rápido');
const promessa2=nova promessa ((rejeitar)=> setTimeout ((rejeitar)=> rejeitar, 100,"mais rápido")
const promessa3=nova promessa ((resolver)=> setTimeout ((resolver)=> resolver, 700,'rápido');
promessas constantes=[promessa1, promessa2, promessa3]; Promise.any (promessas).then ((valor)=> console.log (valor)); //Saída: mais rápido
5.
WeakRef
const weakRef=novo WeakRef ({ nome:"Linda";
});
console.log (weakRef.deref (). nome) //output: Linda
WeakRef
é um recurso avançado que provavelmente deve ser evitado, de acordo com as notas da proposta TC39. Para entender o que WeakRef
faz, você precisa primeiro entender os conceitos de referência de objeto e coleta de lixo em JavaScript. const obj={}
obj
contém uma referência ao objeto atribuído a ele. WeakRef
cria uma referência fraca para o objeto passado a ele. Isso significa que sempre que o navegador precisar executar a coleta de lixo, se a única referência a esse objeto for de uma variável WeakRef
, o mecanismo JavaScript pode remover com segurança o objeto da memória e liberar espaço. Isso pode ser ideal para dados WebSocket por causa de sua curta vida útil. WeakRef
é criado com o construtor new WeakRef
, e o valor da variável WeakRef
pode ser acessado por meio do deRef método
. Como começar a usar os recursos do ES2021 em sua base de código hoje
npm install--save-dev @ babel/core @ babel/cli @ babel/preset-env
npm install core-js
babel.config.json
na raiz do seu projeto: { "predefinições": [ [ "@ babel/preset-env", { "useBuiltIns":"uso", "corejs": { "versão":"3.8", "propostas": verdadeiro } } ] ]
}
.browserlistrc
na raiz do seu projeto para especificar os navegadores de destino para o Babel transformar o código em: padrões
versões de nó mantidas
defaults
instrui o Babel a transformar e polyfill código apenas para:
versões de nó mantidas
afirmam que Babel deve transformar e polyfill código para todas as versões de Node que ainda são mantidas pela base Node.js. ./node_modules/.bin/babel src--out-dir lib
src
em código adequado para navegadores mais antigos (conforme especificado pelo seu arquivo .browserlistrc
) e produzirá cada arquivo para o diretório lib
.