JavaScript Tipos de Dados
Em JavaScript, todos os dados manipulados pertencem a um tipo específico. No total, a linguagem possui oito tipos de dados, divididos entre tipos primitivos e tipos complexos.
Os tipos primitivos são os mais básicos e imutáveis:
String: representa uma sequência de caracteres, usada para armazenar textos.
Number: representa um valor numérico, podendo ser inteiros ou de ponto flutuante.
BigInt: permite trabalhar com números inteiros extremamente grandes, além do limite do tipo Number.
Boolean: representa valores lógicos, podendo ser
(verdadeiro) outrue
(falso).false
Undefined: indica que uma variável foi declarada, mas ainda não recebeu um valor.
Null: representa a ausência intencional de valor.
Symbol: cria identificadores únicos, frequentemente usados como chaves de propriedades em objetos.
Além desses, há um tipo complexo:
Object: representa uma estrutura de dados mais sofisticada, permitindo armazenar coleções de valores e métodos.
Cada um desses tipos tem seu próprio comportamento e uso específico dentro do JavaScript.
Dados Numéricos
Number
O tipo Number representa valores numéricos em JavaScript, abrangendo tanto números inteiros quanto números fracionários (de ponto flutuante).
Números inteiros:
Podem ser positivos ou negativos, por exemplo, 35 ou -42. Existe um intervalo seguro para representar números inteiros com precisão garantida, indo de -(253 - 1) até (253 - 1).
Números Fracionários (Ponto Flutuante)
Números fracionários, também chamados de números de ponto flutuante, utilizam um ponto .
3.5575
-0.25
Sistemas Binário, Octal e Hexadecimal
O JavaScript permite definir números em diferentes bases numéricas:
Binário (prefixo
)0b
const num1 = 0b1011; // número 11 em decimal console.log(num1); // 11
Octal (prefixo
)0o
const num1 = 0o11; // número 9 em decimal console.log(num1); // 9
Hexadecimal (prefixo
)0x
const num1 = 0xff; // número 255 em decimal console.log(num1); // 255 const num2 = 0x1A; // número 26 em decimal console.log(num2); // 26
Essas representações são úteis para manipulações bit a bit e certas aplicações computacionais.
Desde o ECMAScript 2021, para melhorar a legibilidade, é possível usar um sublinhado _
const num1 = 1234567;
const num2 = 123_4567; // número igual a num1
const num3 = 1234567890;
const num4 = 12_3456_7890; // número igual a num3
BigInt
O tipo BigInt foi introduzido no ECMAScript 2020 para representar números inteiros muito grandes, que ultrapassam os limites do tipo Number.
Por que BigInt é necessário?
Embora seja possível lidar com números grandes usando Number, há limitações de precisão ao ultrapassar o intervalo seguro.
Exemplo de erro ao usar Number:
let num = 9007199254740991;
console.log(num); // 9007199254740991
console.log(num + 1); // 9007199254740992
console.log(num + 2); // 9007199254740992 (erro de precisão!)
Neste caso, ao somar 2
Para lidar com esse problema, usamos BigInt, adicionando o sufixo n
Se quisermos usar BigInt corretamente, devemos declarar o número com o sufixo n desde o início:
let num = 9007199254740991n;
console.log(num); // 9007199254740991
console.log(num + 1n); // 9007199254740992
console.log(num + 2n); // 9007199254740993
Agora, o console exibe o valor correto, sem perda de precisão.
Limitações do tipo Number
O tipo Number possui um intervalo de valores seguros que podem ser representados com precisão. Podemos verificar esses limites usando as constantes:
console.log(Number.MIN_SAFE_INTEGER); // -9007199254740991
console.log(Number.MAX_SAFE_INTEGER); // 9007199254740991
Se tentarmos armazenar valores acima desse intervalo usando Number, ocorrerá perda de precisão.
Por exemplo:
const num = 9223372036854775801;
console.log(num); // 9223372036854776000 (erro!)
Boolean
O tipo Boolean representa valores booleanos ou lógicos true
false
const isAlive = true;
const isDead = false;
String
O tipo String representa cadeias de caracteres, utilizadas para armazenar textos.
Para definir strings em JavaScript, podem ser usadas aspas duplas "
'
`
const user = "Tom";
const company = 'Microsoft';
const language = `JavaScript`;
console.log(user);
console.log(company);
console.log(language);
A única regra é que o tipo de aspas usado para abrir a string deve ser o mesmo para fechá-la.
Caso seja necessário incluir aspas dentro da string, podemos:
Se aspas forem encontradas dentro da string, elas devem ser escapadas com uma barra invertida. Por exemplo, se tivermos o texto "Empresa "Burger & Co""
const company = "Empresa \"Burger & Co\"";
Também podemos usar um tipo diferente de aspas dentro da string:
const company1 = "Empresa 'Burger & Co'";
const company2 = 'Empresa "Burger & Co"';
Além disso, a string pode conter símbolos especiais - sequências de escape, que são interpretadas de uma maneira específica. As sequências mais comuns são "\n"
"\t"
const text = "Hello Programício\nHello\tWorld";
console.log(text);
Ao imprimir no console, o texto da constante text
Hello Programício Hello World
Interpolação de Strings
Usando crases `
${}
const user = "Tom";
const text = `Nome: ${user}`;
console.log(text); // Nome: Tom
A interpolação também permite incorporar múltiplas variáveis:
const user = "Tom";
const age = 37;
const isMarried = false;
const text = `Nome: ${user} Idade: ${age} Casado: ${isMarried}`;
console.log(text); // Nome: Tom Idade: 37 Casado: false
Além disso, strings com crases suportam múltiplas linhas:
const text =
`Todos nós aprendemos um pouco
De alguma coisa e de algum modo,
Assim, com a educação, graças a Deus,
Não é difícil brilhar para nós.`;
console.log(text);
Saída no console do navegador:
Todos nós aprendemos um pouco De alguma coisa e de algum modo, Assim, com a educação, graças a Deus, Não é difícil brilhar para nós.
Undefined e Null
Undefined
O tipo Undefined indica que uma variável foi declarada, mas ainda não recebeu um valor. Quando isso acontece, seu valor padrão é undefined
Por exemplo, ao declarar uma variável sem atribuir um valor, ela automaticamente recebe undefined
let email;
console.log(email); // undefined
Null
Atribuir o valor null
let email;
console.log(email); // undefined
email = null;
console.log(email); // null
Vale notar que, embora seja tecnicamente possível atribuir o valor undefined
let email = "tome@mimimail.com";
email = undefined; // atribuindo undefined explicitamente
console.log(email); // undefined
Isso não é recomendado, pois o JavaScript já atribui undefined
null
Resumo prático:
Use
quando uma variável não foi inicializada.undefined
Use
para indicar que a variável não possui valor de forma intencional.null
Object
O tipo Object representa uma estrutura de dados mais complexa, permitindo armazenar coleções de valores. A forma mais simples de definir um objeto é utilizando chaves {}
const user = {};
Objetos podem conter propriedades e métodos:
const user = {name: "Tom", age: 24};
console.log(user.name); // Tom
Os valores dentro do objeto podem ser de diferentes tipos, como números, strings, arrays e até mesmo outros objetos.
Uma explicação mais detalhada sobre objetos será explorada nos próximos artigos.
Tipagem Fraca e Dinâmica
O JavaScript é uma linguagem de tipagem fraca e dinâmica, o que significa que uma variável pode mudar de tipo ao longo do código.
Exemplo:
let id; // tipo undefined
console.log(id);
id = 45; // tipo number
console.log(id);
id = "45"; // tipo string
console.log(id);
Embora o console exiba 45 nas duas últimas atribuições, no segundo caso a variável é um número, e no terceiro caso, uma string.
Isso acontece porque o JavaScript converte os tipos automaticamente quando necessário.
Operador typeof
O operador typeof
let id;
console.log(typeof id); // "undefined"
id = 45;
console.log(typeof id); // "number"
id = 45n;
console.log(typeof id); // "bigint"
id = "45";
console.log(typeof id); // "string"
Nota: typeof null
"object"
null
Resumo
é usado para representar valores numéricos inteiros e de ponto flutuante.number
O intervalo seguro para números inteiros vai de -(2⁵³ - 1) até (2⁵³ - 1). Para valores acima desse intervalo, o tipo
deve ser utilizado.BigInt
É possível representar números em bases binária, octal e hexadecimal.
representa valores lógicosboolean
etrue
.false
pode ser definido com aspas simples, duplas ou crases e suporta interpolação e múltiplas linhas.string
é atribuído automaticamente quando uma variável não recebe valor, enquantoundefined
representa ausência de valor intencional.null
armazena coleções de valores e métodos.object
O JavaScript possui tipagem dinâmica e fraca, permitindo que variáveis mudem de tipo.
O operador
é usado para verificar o tipo de uma variável.typeof
Nos próximos artigos, exploraremos cada um desses tipos com mais detalhes, além de aprender a manipulá-los e utilizá-los em diferentes situações.