Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Muita gente acha estranho o fato de que, enquanto Number, Boolean e String podem ser usados com o operador new para criar objetos, BigInt não segue esse padrão. Essa diferença não é aleatória, tem uma justificativa técnica e de design na evolução do JavaScript.
---
Historicamente, o JavaScript permitiu que certos tipos primitivos fossem criados com a sintaxe new, como new String('texto'), new Number(123) ou new Boolean(true). Isso criava objetos encapsulados, que na maioria das vezes causavam mais confusão do que benefício, pois a comparação entre esses objetos e seus primitivos muitas vezes gerava resultados inesperados.
Por exemplo, 'x' === new String('x') é falso, porque um objeto não é igual ao seu valor primitivo. Apesar de ainda ser possível, essa prática é desencorajada. Os tipos primitivos modernos foram projetados para serem usados como valores literais, não como objetos, justamente para evitar esses problemas. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
Diferente de seus colegas, BigInt foi pensado para ser apenas uma função que retorna o valor primitivo de mesmo nome. Isso foi uma decisão consciente do comitê TC39, que lidera a evolução do ECMAScript. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Segundo membros do TC39, usar new BigInt() não faz sentido, pois BigInt é uma primitiva, e primitives não devem ser objetos. Como as funções que geram primitives, como Symbol e BigInt, não possuem assinatura de construtor, a tentativa de usar new acaba gerando erro. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte.
Essa abordagem evita confusões: se você quer um valor BigInt, passa a primitiva direto. não há necessidade nem sentido em criar uma instância de BigInt com new.
Ao evitar a assinatura de construtor para BigInt, o padrão fica mais claro e menos propenso a uso incorreto. Além disso, reforça o conceito de primitives como valores imutáveis e independentes de objetos. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Por outro lado, essa mudança pode gerar dúvidas em quem migra de versões antigas, onde era comum usar new String() ou new Number(). Essa mudança força uma compreensão mais aprofundada do conceito de primitivas versus objetos wrapper. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
Para criar um BigInt, basta passar a literal ou o valor para a função, como BigInt(1234567890123456789n). Não há a opção de usar new, e isso é desejável para evitar confusões. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar.
Se precisar de um objeto que contenha um BigInt, pode usar Object() ou criar um wrapper manualmente, mas na maioria dos casos, o valor primitivo é suficiente. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois.
---
A decisão de não tornar BigInt uma função construtora é uma evolução natural na direção de tornar o uso de tipos primitivos mais seguro e menos propenso a erros. Essa mudança reforça a ideia de que primitives devem ser usados como valores e não como objetos, promovendo uma API mais limpa e menos ambígua. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Sem esse critério, a solução pode parecer simples no começo e cara no suporte.
No seu time, já pensou em revisar o uso de objetos wrapper? Como vocês lidam com esses tipos na prática, especialmente ao migrar código legado? A decisão fica mais saudável quando o time consegue medir o impacto depois. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
Carregando comentários...