29
loading...
This website collects cookies to deliver better user experience
&&=
, ||=
e ??=
. O que eles fazem?if (!user.id) user.id = 1
user.id = user.id || 1
user.id ||= 1
??
e o and com o &&
._
no meio de números para separar suas casas sem contar como um operador ou uma parte do código, vou tirar o próprio exemplo da proposta para demonstrar:1_000_000_000 // Ah, so a billion
101_475_938.38 // And this is hundreds of millions
let fee = 123_00; // $123 (12300 cents, apparently)
let fee = 12_300; // $12,300 (woah, that fee!)
let amount = 12345_00; // 12,345 (1234500 cents, apparently)
let amount = 123_4500; // 123.45 (4-fixed financial)
let amount = 1_234_500; // 1,234,500
Promise.any
.Promise.all
. A diferença é que, quando tínhamos um erro no Promise.all
, todas as promises eram rejeitadas. Já no Promise.any
, se qualquer uma das promises for resolvida, teremos um resultado.Promise.any([
fetch('https://existeenaofalha.com.br').then(()=>'home'),
fetch('https://existeefalha.com.br').then(()=>'erro')
])
.then((first) => console.log('o primeiro resultado que vier'))
.catch((error) => console.error(error))
AggregateError
é basicamente uma questão de facilidade. Como retornar uma sequencia de erros de várias promises que poderiam ter falhado? Então uma nova classe de erros foi criada para que seja possível encadear e adicionar múltiplos erros em um único erro agregado.'x'.replace('', '_')
, iríamos somente obter a substituição para a primeira palavra uma única vez, se quiséssemos fazer isso no texto todo, teríamos que usar uma regex, como 'xxx'.replace(/(?:)/g, '_')
para obter uma substituição geral.replaceAll
, temos o resultado da segunda usando a sintaxe da primeira:'xxx'.replaceAll('', '_') //'_x_x_x_'
WeakRefs
é prover uma referência fraca a um objeto na memória, esta referência permite que estes objetos sejam coletados pelo Garbage Collector livremente, liberando a memória que estão alocando assim que qualquer referência para elas seja removida.let target = {};
let wr = new WeakRef(target);
// a WR e o target não são o mesmo objeto
// Criamos um novo registro
const registry = new FinalizationRegistry(value => {
// ....
});
registry.register(myObject, "valor", myObject);
// ...se você não ligar mais para `myObject` algum tempo depois...
registry.unregister(myObject);