Médio JavaScript
BigInt e Symbol na prática
Enunciado
Crie um programa que:
- Declare um
BigIntmuito grande (maior queNumber.MAX_SAFE_INTEGER) e imprima seu valor e tipo. - Crie dois
Symbolcom a mesma descrição e mostre que eles são diferentes. - Use um
Symbolcomo chave de um objeto e acesse o valor correspondente.
Requisitos
- Declare um
BigIntusando a notaçãonouBigInt(). - Imprima o valor do
BigInte seu tipo comtypeof. - Crie dois
Symbolcom a mesma descrição e compare com===, imprimindofalse. - Crie um objeto com uma chave do tipo
Symbole acesse o valor usando essa chave.
Código inicial
// Implemente os passos solicitados
Saída esperada
BigInt: 9007199254740993n, tipo: bigint
Symbols iguais? false
Valor da chave symbol: 42
Ver dica
Para criar um BigInt, use 9007199254740993n ou BigInt("9007199254740993"). Para usar Symbol como chave, defina const chave = Symbol("chave") e depois obj[chave] = valor.
Mostrar solução
// 1. BigInt
const grande = 9007199254740993n; // maior que Number.MAX_SAFE_INTEGER
console.log(`BigInt: ${grande}, tipo: ${typeof grande}`);
// 2. Symbols únicos
const sym1 = Symbol("id");
const sym2 = Symbol("id");
console.log(`Symbols iguais? ${sym1 === sym2}`); // false
// 3. Symbol como chave de objeto
const chave = Symbol("chave");
const obj = {
[chave]: 42
};
console.log(`Valor da chave symbol: ${obj[chave]}`);
Passo a passo
- Criamos
grandecom o literal9007199254740993n, que excedeNumber.MAX_SAFE_INTEGER(2^53 - 1). - Usamos
typeof grandepara mostrar que é"bigint". - Criamos
sym1esym2com a mesma descrição"id", mas cada chamada aSymbol()gera um valor único. - Comparamos
sym1 === sym2e imprimimosfalse. - Criamos
chavecomo um Symbol e usamos a sintaxe de chave computada[chave]para definir a propriedade no objetoobj. - Acessamos
obj[chave]e imprimimos o valor42.
Por que funciona
BigInt é um tipo primitivo que representa inteiros de precisão arbitrária. A notação n no final do número cria um BigInt literal. Symbol é um tipo primitivo que garante unicidade: mesmo com a mesma descrição, dois Symbols nunca são iguais. Usar Symbol como chave de objeto evita colisões com outras propriedades.
Erros comuns
- Tentar misturar BigInt com Number em operações aritméticas:
1n + 1geraTypeError. Converta explicitamente:1n + BigInt(1). - Usar
new Symbol():Symbolnão é um construtor, entãonew Symbol()lançaTypeError. UseSymbol("desc"). - Esquecer os colchetes ao usar Symbol como chave:
obj.chaveprocura a propriedade string"chave", não o Symbol. Useobj[chave].
Outra forma de resolver
Para criar BigInt a partir de string: BigInt("9007199254740993"). Para Symbols como chaves, pode-se usar Object.defineProperty(obj, chave, { value: 42 }). Preferível quando se precisa controlar descritores da propriedade.
Saída esperada
BigInt: 9007199254740993n, tipo: bigint
Symbols iguais? false
Valor da chave symbol: 42